柱形-折线融合图
# 1.导入所需要用到的库以及图表类
import pyecharts
from pyecharts.charts import Bar, Line # Bar表示的是柱形图/条形图,Line表示的是折线图
from pyecharts import options as opts
# 2.准备x轴数据
x_year = ["{}年".format(i) for i in range(2014, 2022)]
# 设置x轴的年份数据,后面跟的单位为“年”
# 3.创建柱形图实例,为图表实例填充数据,并设置可选的系列配置项)
bar = (
Bar(init_opts=opts.InitOpts(width="1000px", height="500px"))
# 设置柱形图宽度width为1000px、高度heigh为500px
.add_xaxis(x_year) # 添加柱形图x轴的数据
.add_yaxis("诊疗量(万人次)", # 添加图例,名为"诊疗量(万人次)"
[87430,90912,96225,101885,107147,116390,105764,120215], # y轴数据
yaxis_index=1, # y轴的索引,用于绘制多个y轴的图表中
color="orange" # 设置柱形图填充颜色为橙色
)
.extend_axis(
yaxis=opts.AxisOpts(name="诊疗量(万人次)", # y轴名称
type_="value",
min_=0, max_=140000, # 设置y轴最小值min为0,最大值max为14000
position="left", # 显示在y轴左侧
axisline_opts=opts.AxisLineOpts(
linestyle_opts=opts.LineStyleOpts(color="orange")), # 设置y轴、y轴名称以及y轴数据的颜色
)
)
.extend_axis(
yaxis=opts.AxisOpts(name="同比增长速(%)", # y轴名称
type_="value",
min_=-20, max_=20, # 设置y轴最小值min为-20,最大值max为20
position="right", # 显示在y轴右侧
axisline_opts=opts.AxisLineOpts(
linestyle_opts=opts.LineStyleOpts(color="purple")), # 设置y轴、y轴名称以及y轴数据的颜色
)
)
.set_global_opts(
title_opts=opts.TitleOpts(title="2014-2021年中国中医类医疗卫生机构诊疗量",pos_top="1%", pos_left="10%"), # 设置标题名称
tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"), # 设置显示提示框
legend_opts=opts.LegendOpts(pos_top="1%",pos_left="50%"), # 图例距离左边边距为50%
)
.set_series_opts(
itemstyle_opts=opts.ItemStyleOpts(
opacity=0.5) # 设置透明度为0.5
)
)
# 4.创建折线图实例,为图表实例填充数据
line = (
Line()
.add_xaxis(x_year) # 添加折线图x轴的数据
.add_yaxis("同比增长速(%)", # 添加图例,名为"同比增长速(%)"
[7.40,4.00,5.83,5.81,5.16,8.63,-9.13,13.66], # y轴数据
yaxis_index=2, # y轴的索引,用于绘制多个y轴的图表中
z=3,
color="purple") # 设置折线图颜色为紫色
)
# 5.渲染图表
bar.overlap(line).render_notebook() # 直接渲染到notebook
展示图表结果如下:
圆环图
# 1.导入所需要用到的库以及图表类
from pyecharts import options as opts
from pyecharts.charts import Pie # Pie表示饼图
# 2.创建图表实例,添加可选的全局配置项
(
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])], # 传入数据
# [("20岁以下",2.2),("20-30岁",27.9),("31-40岁",56.2),("41-50岁",10.9),("51岁以上",2.8)], # 也可以用这种方法传入数据
radius=[80,160],
# 饼图的半径,数组的第一项是内半径,第二项是外半径
# 默认设置成百分比,相对于容器高宽中较小的一项的一半
center=["27%","45%"],
# 饼图的中心(圆心)坐标,数组的第一项是横坐标,第二项是纵坐标,默认设置成百分比
# 设置成百分比时第一项是相对于容器宽度,第二项是相对于容器高度
start_angle = 0, # 设置起始角度,支持范围 [0,360]
is_clockwise = False, # 饼图的扇区是否是顺时针排布,False表示逆时针排布
)
.set_global_opts(
title_opts=opts.TitleOpts(title="中药材消费者画像",pos_top="3%",pos_left="18%"), # 设置标题以及标题的位置
legend_opts=opts.LegendOpts(orient="vertical", pos_top="3%",pos_left="47%"), # 设置图例的位置
)
.render_notebook() # 渲染图表
)
展示图表结果如下:
堆积柱形图
# 1.导入所需要用到的库以及图表类
from pyecharts import options as opts
from pyecharts.charts import Bar
# 2.创建柱形图实例,添加可选的全局配置项
(
Bar()
.add_xaxis(['2019年','2020年','2021年','2022年','2023年']) # x轴数据
.add_yaxis("跨国企业占比", [20.3,22.0,23.5,22.5,22.3], stack="stack1", bar_width=70) # 第一个y轴数据,stack="stack1"表示数据堆叠,bar_width表示设置柱形的宽度
.add_yaxis("本土企业占比", [79.7,78.0,76.5,77.5,77.7], stack="stack1", bar_width=70) #第二个y轴数据
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(
title="全国药店中药饮品供应商占比",pos_top="3%",pos_left="30%", # 设置标题名称以及控制标题所在位置
# title_textstyle_opts=opts.TextStyleOpts(font_size=12), # 控制标题的字体大小,这里就不设置了
),
legend_opts=opts.LegendOpts(pos_top="3%",pos_left="60%"), # 控制图例的位置
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=17)) # 控制x轴字体大小
)
.render_notebook() # 渲染图表
)
展示图表结果如下:
雷达图
# 1.导入所需要用到的库以及图表类
from pyecharts import options as opts
from pyecharts.charts import Radar # Radar表示雷达图
# 2.准备数据以及标签名称
data = [{"value": [33, 45, 3, 9, 6, 4], "name": "销售额占比"}]
c_schema = [
{"name": "化学药", "max": 45, "min": 0},
{"name": "中成药", "max": 45, "min": 0},
{"name": "生物制品", "max": 45, "min": 0}, # max、min控制最大值和最小值
{"name": "医疗器械", "max": 45, "min": 0},
{"name": "中药饮品", "max": 45, "min": 0},
{"name": "保健品", "max": 45, "min": 0},
]
# 3.创建雷达图实例,添加可选的全局配置项
(
Radar()
.set_colors(["pink"]) # 数据点与填充区域颜色
.add_schema(
schema=c_schema,
shape="circle", # 雷达图绘制类型有'polygon'和'circle'两种参数可选
center=["50%", "50%"], # 雷达的圆心坐标,一般设置成百分比,第一项是相对于容器宽度,第二项是相对于容器高度
radius="80%", # 雷达的半径
start_angle=0,
textstyle_opts=opts.TextStyleOpts(color="black"), # 设置
angleaxis_opts=opts.AngleAxisOpts(
min_=0,
max_=360,
is_clockwise=False,
interval=5, # 坐标轴间隔
axistick_opts=opts.AxisTickOpts(is_show=False),
axislabel_opts=opts.LabelOpts(is_show=False),
splitline_opts=opts.SplitLineOpts(is_show=False),
),
radiusaxis_opts=opts.RadiusAxisOpts(
min_=0,
max_=45,
interval=20, # 坐标轴间隔
splitarea_opts=opts.SplitAreaOpts(
is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1) # 设置透明度
),
),
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.7), # 设置区域填充的透明度
linestyle_opts=opts.LineStyleOpts(width=1), # 线样式配置项,设置线的宽度
)
.set_global_opts(
title_opts=opts.TitleOpts(
title="全国药店药品销售额占比",pos_top="3%", pos_left="40%",),
)
.render_notebook() # 渲染图表
)
展示图表结果如下:
并行多图
# 导入所需要用到的库以及图表类
from pyecharts import options as opts
from pyecharts.charts import Bar, Grid, Line, Pie, Radar
# Bar表示的是柱形图/条形图,Line表示的是折线图,Pie表示的是饼图,Radar表示的是雷达图
# 柱形-折线融合图
x_year = ["{}年".format(i) for i in range(2014, 2022)]
# 设置x轴的年份数据,后面跟的单位为“年”
# 柱形图实例
bar1 = (
Bar(init_opts=opts.InitOpts(width="1000px", height="500px"))
# 设置柱形图宽度width为1000px、高度heigh为500px
.add_xaxis(x_year) # 添加柱形图x轴的数据
.add_yaxis("诊疗量(万人次)", # 添加图例,名为"诊疗量(万人次)"
[87430,90912,96225,101885,107147,116390,105764,120215], # y轴数据
yaxis_index=1, # y轴的索引,用于绘制多个y轴的图表中
color="orange", # 设置柱形图填充颜色为橙色
xaxis_index=0,
z=0
)
.extend_axis(
yaxis=opts.AxisOpts(name="诊疗量(万人次)", # y轴名称
type_="value",
min_=0, max_=140000, # 设置y轴最小值min为0,最大值max为15000
position="left", # 显示在y轴左侧
axisline_opts=opts.AxisLineOpts(
linestyle_opts=opts.LineStyleOpts(color="orange")), # 设置y轴、y轴名称以及y轴数据的颜色
)
)
.extend_axis(
yaxis=opts.AxisOpts(name="同比增长速(%)", # y轴名称
type_="value",
min_=-20, max_=20, # 设置y轴最小值min为-20,最大值max为20
position="right", # 显示在y轴右侧
axisline_opts=opts.AxisLineOpts(
linestyle_opts=opts.LineStyleOpts(color="purple")), # 设置y轴、y轴名称以及y轴数据的颜色
)
)
.set_global_opts(
title_opts=opts.TitleOpts(title="2014-2021年中国中医类医疗卫生机构诊疗量",pos_top="1%", pos_left="10%"), # 设置标题名称,控制标题的位置
tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"), # 设置显示提示框
legend_opts=opts.LegendOpts(pos_top="1%",pos_left="53%"), # 图例距离左边边距为53%,距离顶部边距为1%
)
.set_series_opts(
itemstyle_opts=opts.ItemStyleOpts(
opacity=0.5) # 设置透明度为0.5
)
)
# 折线图实例
line = (
Line()
.add_xaxis(x_year) # 添加折线图x轴的数据
.add_yaxis("同比增长速(%)", # 添加图例,名为"同比增长速(%)"
[7.40,4.00,5.83,5.81,5.16,8.63,-9.13,13.66], # y轴数据
yaxis_index=2, # y轴的索引,用于绘制多个y轴的图表中
z=3, # 折线图展示在柱形图上方
xaxis_index=0,
color="purple") # 设置折线图颜色为紫色
)
# 堆积柱形图
bar2 = (
Bar()
.add_xaxis(['2019年','2020年','2021年','2022年','2023年'])
.add_yaxis("跨国企业占比",
[20.3,22.0,23.5,22.5,22.3],
stack="stack1", # 数据堆叠
xaxis_index=1,yaxis_index=3)
.add_yaxis("本土企业占比",
[79.7,78.0,76.5,77.5,77.7],
stack="stack1",
xaxis_index=1,yaxis_index=3)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(
title="全国药店中药饮品供应商占比",pos_top="50%",pos_left="38%", # 设置标题名称,控制标题的位置
),
legend_opts=opts.LegendOpts(is_show=False), # 设置不显示图例
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=9)) # 控制x轴字体大小
)
)
# 饼图
pie = (
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])], # 传入数据
# [("20岁以下",2.2),("20-30岁",27.9),("31-40岁",56.2),("41-50岁",10.9),("51岁以上",2.8)], # 也可以用这种方法传入数据
radius=[40,80],
# 饼图的半径,数组的第一项是内半径,第二项是外半径
# 默认设置成百分比,相对于容器高宽中较小的一项的一半
center=["20%","80%"],
# 饼图的中心(圆心)坐标,数组的第一项是横坐标,第二项是纵坐标,默认设置成百分比
# 设置成百分比时第一项是相对于容器宽度,第二项是相对于容器高度
start_angle = 0, # 起始角度,支持范围 [0,360]
is_clockwise = False, # 饼图的扇区是否是顺时针排布
)
.set_global_opts(
title_opts=opts.TitleOpts(title="中药材消费者画像",pos_top="50%",pos_left="12%"), # 设置标题以及标题的位置
legend_opts=opts.LegendOpts(is_show=False), # 设置不显示图例
)
)
# 放在实例后面,不然会报错
barline=bar1.overlap(line) # 融合图表
grid=(
Grid()
.add(barline, grid_opts=opts.GridOpts(pos_bottom="60%"),
is_control_axis_index=True,) # 第一个图表:折线-柱形融合图
.add(bar2, grid_opts=opts.GridOpts(pos_top="57%",pos_bottom="5%",pos_left="41%",pos_right="37%"),
is_control_axis_index=True,) # 第三个图表:堆积柱形图
# .add(radar, grid_opts=opts.GridOpts(pos_top="60%",pos_left="65%"))
.add(pie, grid_opts=opts.GridOpts(pos_top="57%"),
is_control_axis_index=True,) # 第二个图表:饼图
)
# 渲染图表到notebook
grid.render_notebook()
展示图表结果如下: