需求一: 请基于pyecharts,用柱形图和折线图在同一个坐标系展示表1数据,得到图1。
from pyecharts import options as opts
from pyecharts.charts import Bar, Grid, Line
Bar(init_opts=opts.InitOpts(width='950px', height='600px'))#指定画布大小
x_data = ["{}年".format(i) for i in range(2014, 2022)]#设置x轴
bar = (
Bar()
.add_xaxis(x_data)
.add_yaxis(
"诊疗量(万人次)",
[87430, 90912, 96225, 101885, 107147, 116390, 105764, 120215],#准备数据
yaxis_index=1,
label_opts=opts.LabelOpts(is_show=False),
color="green",
)
.extend_axis(
yaxis=opts.AxisOpts(
name="诊疗量(万人次)",
type_="value",
min_=0,
max_=150000,
position="left",
)
)
.extend_axis(
yaxis=opts.AxisOpts(
type_="value",
name="同比增速(%)",
min_=-10,
max_=15,
position="right",
axisline_opts=opts.AxisLineOpts(
linestyle_opts=opts.LineStyleOpts(color="orange")
),
axislabel_opts=opts.LabelOpts(formatter="{value} %"),
splitline_opts=opts.SplitLineOpts(
is_show=True, linestyle_opts=opts.LineStyleOpts(opacity=1)
),
)
)
)
#设置标题和图例
bar.set_global_opts(
title_opts=opts.TitleOpts(title="2014-2021年中国中医类医疗卫生机构诊疗量"),
legend_opts=opts.LegendOpts(pos_left='42%' ),#图例距离标题边距:42%
)
line = (
Line()
.add_xaxis(x_data)
.add_yaxis(
"同比增速(%)",
[7.40, 4.00, 5.83, 5.81, 5.16, 8.63, -9.13, 13.66],
yaxis_index=2,
color="orange",
z=2
)
)
#bar.overlap(line)
bar.overlap(line).render_notebook()#渲染到notebook中
需求二: 请基于pyecharts,用环图展示表2数据,得到图2。
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.commons.utils import JsCode
def new_label_opts():
return opts.LabelOpts(formatter=JsCode(fn), position="center")#画布位置
c2 = (
Pie()
.add(
"",
[list(z) for z in zip(["20岁以下", "20-30岁", "31-40岁", "41-50岁", "51岁以上"], [2.2, 27.9,56.2,10.9,2.8])],#数据
center=["20%", "30%"],#图表的中心位置
radius=[60, 80],#表示半径
)
.set_global_opts(
title_opts=opts.TitleOpts(title="中药材消费者画像数据"),
legend_opts=opts.LegendOpts(
is_show=False
),
)
.render("mutiple_pie0.html")#效果图位置命名
)
需求三: 请基于pyecharts,用堆积柱形图展示表3数据,得到图3。
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.globals import ThemeType
#数据准备
year_data = [2019,2020,2021,2022,2023]
list2 = [20.0,22.0,23.5,22.5,22.3]
list3 = [79.7,78.0,76.5,77.5,77.7]
c = (
Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
.add_xaxis(year_data)
.add_yaxis("跨国企业占比(%)", list2, stack="stack1", category_gap="60%")
.add_yaxis("本土企业占比(%)", list3, stack="stack1", category_gap="60%")
.set_series_opts(
label_opts=opts.LabelOpts(
position="right")
)
.set_global_opts(title_opts=opts.TitleOpts(title="全国药店中药饮片供应商占比情况"))
.render("堆积柱形图.html")
)
需求四: 请基于pyecharts,用雷达图展示表4数据,得到图4。
from pyecharts import options as opts
from pyecharts.charts import Radar
data = [[33,45,3,9,6,4]]
c = (
Radar()
.add_schema(shape="circle",#设置雷达图形状
schema=[
opts.RadarIndicatorItem(name="化学药", max_=50),
opts.RadarIndicatorItem(name="中成药", max_=50),
opts.RadarIndicatorItem(name="生物制品", max_=50),
opts.RadarIndicatorItem(name="医疗器械", max_=50),
opts.RadarIndicatorItem(name="中药饮片", max_=50),
opts.RadarIndicatorItem(name="保健品", max_=50),
]
)
.add("药品占比",
data,
areastyle_opts=opts.AreaStyleOpts(opacity=0.1),# 设置数据区域的透明度为0.1 (alpha)
linestyle_opts=opts.LineStyleOpts(width=1) # 设置线条的宽度为1
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
legend_opts=opts.LegendOpts(selected_mode="single"),
title_opts=opts.TitleOpts(title="全国药店药品销售额占比"),
)
.render("雷达图.html")
)
需求五: 将上述图1到图4,利用“并行多图”的方式排布,得到图5。(参考示意图)
需求六: 将上述图1到图5,利用“轮播多图”的方式排布,得到图6。