一、各表格数据
表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。
1、代码如下:
from pyecharts import options as opts
from pyecharts.charts import Bar, Line
from pyecharts.faker import Faker
x_year = ["2014", "2015", "2016", "2017", "2018", "2019", "2020", "2021"]
data1 = [87430, 90912, 96225, 101885, 107147, 116390, 105764, 120215]
data2 = [7.40, 4.00, 5.83, 5.81, 5.16, 8.63, -9.13, 13.66]
bar = Bar()
bar.add_xaxis(x_year)
bar.add_yaxis("", data1,
# z值小的图形会被z值大的图形覆盖
z=2,
color='orange',
)
bar.extend_axis(
yaxis=opts.AxisOpts(
name='同比增速(%)',
# 坐标轴标签配置项
axislabel_opts=opts.LabelOpts(
formatter="{value}%",
font_size = 10
),
interval=3,
min_=-20,
max_=20,
)
)
# 设置系列配置项
bar.set_series_opts(
label_opts=opts.LabelOpts(
is_show=True,
font_size = 15
)
)
# 设置全局配置项(“全局配置项”中的“图例”和“提示框”都是默认显示的)
bar.set_global_opts(
# 图例
legend_opts=opts.LegendOpts(is_show=False, pos_left='50%', pos_bottom='93%'), # pos_left\pos_bottom表示图例离容器左、下的距离
# 工具箱
toolbox_opts=opts.ToolboxOpts(is_show=False),
# 缩放条
datazoom_opts=opts.DataZoomOpts(is_show=False, range_start='100%', range_end='100%'),
# # 标题(title为标题,subtitle为副标题)
title_opts=opts.TitleOpts(title="2014-2021年中国中医类医疗卫生机构诊疗",pos_left='30%', pos_bottom='93%'),
# 轴的配置(这里是生效 x 轴)
xaxis_opts=opts.AxisOpts(
# 坐标轴名称
name='年份(年)',
# 坐标轴名称与轴线之间的距离
name_gap=40,
# 坐标轴名字旋转,角度值
# name_rotate=60,
),
# 轴的配置(这里是生效 y 轴)
yaxis_opts=opts.AxisOpts(
# 坐标轴名称
name='诊疗量(万人次)',
# 坐标轴标签配置项
axislabel_opts=opts.LabelOpts(
formatter="{value}",
font_size = 10
),
),
)
line = Line()
line.add_xaxis(x_year)
line.add_yaxis("", data2, yaxis_index=1,
# z值小的图形会被z值大的图形覆盖
z=3,
color='purple',
)
bar.overlap(line).render_notebook()
2、图表展示
需求二:请基于pyecharts,用环图展示表2数据,得到图2。
1、代码如下:
# 1.【导入需要用到的图表类】
import numpy as np
from pyecharts import options as opts
from pyecharts.charts import Bar,Line,Scatter,Pie
from pyecharts.faker import Faker
# 2.【利用图表类创建图表实例】
# 3.【往图表实例填充数据(数据格式必须符合传参要求)】
# 使用官网示例代码的关键是研究明白输入的数据格式
data = [['20岁以下', 2.2],['20-30岁', 27.9], ['31-40岁', 56.2],['41-50岁', 10.9], ['51岁以上', 2.8]]
# ratios = [2.2, 27.9, 56.2, 10.9, 2.8] # 各年龄段用户比例
# data = ['20岁以下', '20-30岁', '31-40岁', '41-50岁', '51岁以上']
c = Pie()
c.add("", data ,
radius=["15%", "35%"], # 挖掉的直径,整张饼的直径 (百分数指的是占画布中高和宽中小的那一项的比例)
)
# c.set_colors(["blue", "green", "yellow", "red", "pink", "orange", "purple"])
# 4.【设置系列配置项和全局配置项(可选)——类似于matplotlib的图表辅助元素定制和样式美化】
# 全局配置项
c.set_global_opts(
# 标题(title为标题,subtitle为副标题)
title_opts=opts.TitleOpts(title="中药材消费者画像数据",pos_left='38%', pos_bottom='85%'),
# 图例
legend_opts=opts.LegendOpts(is_show=False, pos_left='35%', pos_bottom='85%'),
)
# 系列配置项
c.set_series_opts(
# 标签配置项
label_opts=opts.LabelOpts(
# 饼图、仪表盘、漏斗图 中 formatter: {a}(系列名称),{b}(数据项名称),{c}(数值), {d}(百分比)
formatter="{b}: {d}",
# 标签文字的颜色。如果设置为 'auto',则为视觉映射得到的颜色,如系列色。
# color='auto',
# 标签文字的字体大小
font_size=20,
# 文字字体的风格,可选: 'normal','italic','oblique'
font_style='italic',
# 文字字体的粗细,可选:'normal','bold','bolder','lighter'
font_weight='lighter',
# 标签旋转。从 -90 度到 90 度。正值是逆时针
# rotate=-10,
# 刻度标签与轴线之间的距离
# margin=10,
# 文字块背景色。可以使用颜色值,例如:'#123234', 'red', 'rgba(0,23,11,0.3)'。
# background_color='yellow',
)
)
# 5. 【渲染图表】
c.render_notebook()
2、图表展示
需求三:请基于pyecharts,用堆积柱形图展示表3数据,得到图3。
1、代码如下:
import pandas as pd
from pyecharts.charts import Bar
from pyecharts import options as opts
data = pd.DataFrame({
#准备数据
"区域": ["2019年", "2020年", "2021年", "2022年", "2023年"],#x轴
"总销量": [100, 100, 100, 100, 100],#y轴
"跨国企业占比(%)": [20.3, 22.0, 23.5, 22.5, 22.3],
"本土企业占比(%)": [79.7, 78.0, 76.5, 77.5, 77.7],
})
bar = (
Bar(init_opts=opts.InitOpts(width="800px", height="500px"))#指定画布大小
.add_xaxis(data["区域"].tolist())
.add_yaxis("总销量", data["总销量"].tolist(),
)
)
stack_bar = (
Bar(init_opts=opts.InitOpts(width="830px", height="500px"))
.add_xaxis(data["区域"].tolist())
.add_yaxis("跨国企业占比(%)", data["跨国企业占比(%)"].tolist(), stack="stack1", category_gap="50%",color='orange',)
.add_yaxis("本土企业占比(%)", data["本土企业占比(%)"].tolist(), stack="stack1", category_gap="50%",color='yellow',)
# 在系列设置中设置标签属性
.set_series_opts(
label_opts=opts.LabelOpts(is_show=False)#隐藏数据
)
.set_global_opts(
title_opts=opts.TitleOpts(
#设置标题
title="全国药店中药饮片供应商占比情况",pos_left='33%', pos_bottom='92%'),
#设置图例
legend_opts=opts.LegendOpts(is_show=False))
)
stack_bar.render_notebook()
2、图表展示
需求四:请基于pyecharts,用雷达图展示表4数据,得到图4。
1、代码如下:
from pyecharts import options as opts
from pyecharts.charts import Radar#导入库
v = [[33, 45, 3, 9, 6, 4]]#数据
c = (
Radar(init_opts=opts.InitOpts(width="600px", height="500px"))#指定画布大小
.add_schema(
schema=[
opts.RadarIndicatorItem(name="化学药"),
opts.RadarIndicatorItem(name="中成药"),
opts.RadarIndicatorItem(name="生物制品"),
opts.RadarIndicatorItem(name="医疗器械"),
opts.RadarIndicatorItem(name="中药饮品"),
opts.RadarIndicatorItem(name="保健品"),
],
textstyle_opts=opts.TextStyleOpts(color="#fff"),
)
.add("药品类型", v,
linestyle_opts=opts.LineStyleOpts(color="#CD0000"),)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
legend_opts=opts.LegendOpts(is_show=False,selected_mode="single"),
#设置标题
title_opts=opts.TitleOpts(title="全国药店药品销售额占比",pos_left='33%', pos_bottom='90%'),
)
)
c.render_notebook()
2、图表展示
需求五:将上述图1到图4,利用“并行多图”的方式排布,得到图5。(参考示意图)
需求六:将上述图1到图5,利用“轮播多图”的方式排布,得到图6。