表1. 2014-2021年中国中医类医疗卫生机构诊疗量
年份(年) | 诊疗量(万人次) | 同比增速(%) |
2014 | 87430 | 7.40 |
2015 | 90912 | 4.00 |
2016 | 96225 | 5.83 |
2017 | 101885 | 5.81 |
2018 | 107147 | 5.16 |
2019 | 116390 | 8.63 |
2020 | 105764 | -9.13 |
2021 | 120215 | 13.66 |
表2. 中药材消费者画像数据
年龄 | 占比(%) |
20岁以下 | 2.2 |
20-30岁 | 27.9 |
31-40岁 | 56.2 |
41-50岁 | 10.9 |
51岁以上 | 2.8 |
表3. 全国药店中药饮片供应商占比情况
年份(年) | 跨国企业占比(%) | 本土企业占比(%) |
2019 | 20.3 | 79.7 |
2020 | 22.0 | 78.0 |
2021 | 23.5 | 76.5 |
2022 | 22.5 | 77.5 |
2023 | 22.3 | 77.7 |
表4. 全国药店药品销售额占比
药品类型 | 占比(%) |
化学药 | 33 |
中成药 | 45 |
生物制品 | 3 |
医疗器械 | 9 |
中药饮片 | 6 |
保健品 | 4 |
需求一: 请基于pyecharts,用柱形图和折线图在同一个坐标系展示表1数据,得到图1。
需求二: 请基于pyecharts,用环图展示表2数据,得到图2。
需求三: 请基于pyecharts,用堆积柱形图展示表3数据,得到图3。
需求四: 请基于pyecharts,用雷达图展示表4数据,得到图4。
需求五: 将上述图1到图4,利用“并行多图”的方式排布,得到图5。(参考示意图)
需求六: 将上述图1到图5,利用“轮播多图”的方式排布,得到图6。
需求一:
from pyecharts import options as opts
from pyecharts.charts import Bar, Grid, Line,Pie,Radar
x_data = ["2014", "2015", "2016", "2017", "2018", "2019", "2020", "2021"]
bar1 = (
Bar()
.add_xaxis(xaxis_data=x_data)# 导入系列数据
.add_yaxis(
series_name="诊疗量(万人次)",# 系列名称,用于 tooltip 的显示,legend 的图例筛选。
y_axis=[87430,90912,96225,101885,107147,116390,105764,120215],# 系列数据
label_opts=opts.LabelOpts(is_show=False), # 是否显示数据标签
)
.extend_axis(
yaxis=opts.AxisOpts( #新增 Y 坐标轴配置项
name="同比增速(%)", #新增 Y 坐标名字
type_="value", # 'value': 数值轴,适用于连续数据。
min_=-20, #坐标轴最小值
max_=15, #坐标轴最大值,#LabelOpts:标签配置项
)
)
.set_global_opts( #全局配置项可通过 set_global_opts 方法设置
tooltip_opts=opts.TooltipOpts( #TooltipOpts:提示框配置项
is_show=True, trigger="axis", axis_pointer_type="cross" #is_show是否显示,trigger坐标轴触发,指示器类型:十字准星
),
xaxis_opts=opts.AxisOpts(
type_="category",
axispointer_opts=opts.AxisPointerOpts(is_show=True, type_="shadow"),
),
yaxis_opts=opts.AxisOpts(
name="诊疗量(万人次)",
type_="value",
min_=0,
max_=150000,
axislabel_opts=opts.LabelOpts(formatter="{value} ml"),
axistick_opts=opts.AxisTickOpts(is_show=True),
splitline_opts=opts.SplitLineOpts(is_show=True),
),
title_opts=opts.TitleOpts(title='2014-2021年中国中医类医疗卫生机构诊疗量'),
legend_opts=opts.LegendOpts(pos_left='45%' ),# 图例组件离容器左侧的距离45%。
)
.set_series_opts( #系统配置项
itemstyle_opts=opts.ItemStyleOpts(
opacity=0.5))#柱状图透明度
)
需求二:
from pyecharts import options as opts
from pyecharts.charts import Bar,Line,Scatter,Pie
data = [["20岁以下",2.2],["20-30岁",27.9],["31-40岁",56.2],["41-50岁",10.9],["51岁以上",2.8]]
c1 = (
Pie()
.add("", data ,
radius=["25%", "50%"], # 饼的直径
)
.set_colors(["green", "blue", "pink", "orange", "yellow"])
.set_global_opts(title_opts=opts.TitleOpts(title="中药材消费者画像数据"))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)
需求三:
from pyecharts import options as opts
from pyecharts.charts import Bar
x_years =['2019年', '2020年','2021年', '2022年','2023年'] #导入数据
y1 = [20.3, 22.0, 23.5, 22.5, 22.3]
y2 = [79.7, 78.0, 76.5, 77.5, 77.7]
c2 = (
Bar()
.add_xaxis(x_years)
.add_yaxis("跨国企业占比(%)", y1, stack="stack1", color='orange',bar_width=80) #纵坐标
.add_yaxis("本土企业占比(%)", y2, stack="stack1" ) #纵坐标
.set_series_opts(label_opts=opts.LabelOpts(is_show=True , #是否显示数据标签
position="right", #设置柱形图数据右侧显示
font_size=12, #文字大小
font_weight = "bold") ) #文字字体的粗细
.set_global_opts(title_opts=opts.TitleOpts(title="全国药店中药饮片供应商占比情况")) #设置全局配置项
)
需求四:
#导入库
from pyecharts import options as opts
from pyecharts.charts import Radar
data = [[33, 45, 3, 9, 6, 4]] #导入数据
c_schema = [
{"name": "化学药", "max": 0, "min": 45},
{"name": "中成药", "max": 0, "min": 45},
{"name": "生物制品", "max": 0, "min": 45},
{"name": "医疗器械", "max": 0, "min": 45},
{"name": "中药饮片", "max": 0, "min": 45},
{"name": "保健品", "max": 0, "min": 45},
]
# 绘制雷达图实例
radar = (
Radar(init_opts=opts.InitOpts())
.set_colors(["blue"]) #数据点颜色
.add_schema(
schema=c_schema, # 雷达指示器配置项列表
shape="circle", #雷达图绘制类型
center=["50%", "50%"], #百分比
radius="77%", #半径
angleaxis_opts=opts.AngleAxisOpts( #极坐标系角度轴配置项
min_=0, #坐标轴刻度标签最小值
max_=360, #坐标轴刻度标签最大值
interval=20, #坐标轴分割间隔
axistick_opts=opts.AxisTickOpts(is_show=False), # 轴刻度
axislabel_opts=opts.LabelOpts(is_show=False), #坐标轴线标签配置项
axisline_opts=opts.AxisLineOpts(is_show=False), # 坐标轴线风格配置项
splitline_opts=opts.SplitLineOpts(is_show=False), #坐标轴在 grid 区域中的分隔区域
),
radiusaxis_opts=opts.RadiusAxisOpts( # 极坐标系的径向轴
min_=0, # 设置坐标轴刻度的最小值
max_=45, # 设置坐标轴刻度的最大值
interval=20, # 坐标轴间隔值
),
polar_opts=opts.PolarOpts(),
splitarea_opt=opts.SplitAreaOpts(is_show=False), # 分隔区域配置项
splitline_opt=opts.SplitLineOpts(is_show=False), # 分割线配置项
)
.add(
series_name="全国药店药品销售额占比", #标题
data=data,
areastyle_opts=opts.AreaStyleOpts(opacity=0.2), # 区域填充样式配置项,透明度
linestyle_opts=opts.LineStyleOpts(width=2), #线样式配置项,线宽
)
.set_global_opts(title_opts=opts.TitleOpts(title='全国药店药品销售额占比'))
)