安装pyecharts
# 在anaconda prompt命令行工具下,通过pip清华镜像源安装pyecharts
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyecharts
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 |
步骤如下:
创建柱状图
创建一个 Bar 对象,并使用 add_xaxis
方法设置了 x 轴数据。接着,使用 add_yaxis
方法添加了一个柱状图的数据系列,其中指定了柱形图的图例名、数据和柱形图的颜色,并通过 yaxis_index
将该系列数据指定为使用第一个 y 坐标轴。另外,通过 set_series_opts
方法设置了数据系列的样式选项,包括 itemstyle_opts
用于设置图元的样式,这里将柱形图的透明度设置为0.5,使得柱形图呈现半透明的效果。
bar = (
Bar()
.add_xaxis(x_data) #导入x轴
.add_yaxis(
"诊疗量(万人次)", #柱形图图例名
[87430, 90912, 96225, 101885, 107147, 116390, 105764, 120215], #柱形图数据
yaxis_index=0, #表示y轴的索引,用于拥有多个y轴的单图表中。
color="pink",
).set_series_opts(
itemstyle_opts=opts.ItemStyleOpts( #图元样式配置项
opacity=0.5), #设置柱形图透明度:0.5
)
扩展 y 坐标轴
extend_axis
方法,可以在同一个图表中添加多个 y 坐标轴,以展示更多的数据趋势,或者将不同量纲的数据分别展示在不同的 y 坐标轴上,从而更好地观察它们之间的关系和变化情况。使用 yaxis=opts.AxisOpts(...)
创建了一个新的 y 坐标轴,并指定了其相关属性,如名称、类型、位置等。其中,name
参数指定了 y 坐标轴的名称,position="left"
表示该坐标轴位于左侧,显示的是柱状图的数据系列;type_="value"
表示该坐标轴的类型为数值型;axisline_opts
用于设置坐标轴轴线的相关属性,如颜色等。
.extend_axis(
yaxis=opts.AxisOpts(
name="诊疗量(万人次)", #柱形图y轴名称
type_="value",
position="left", #柱形图y轴在左边显示
axisline_opts=opts.AxisLineOpts(
linestyle_opts=opts.LineStyleOpts(color="blue") #轴名称颜色
),
)
)
.extend_axis(
yaxis=opts.AxisOpts(
type_="value",
name="同比增速(%)", #折线图y轴名称
position="right", #折线图y轴在右边显示
axisline_opts=opts.AxisLineOpts(
linestyle_opts=opts.LineStyleOpts(color="green") #轴名称颜色
)
)
)
)
设置全局配置项
set_global_opts
方法用于设置图表的全局配置:
itle_opts
:用于设置标题的相关选项,如标题名称。在这里,使用了opts.TitleOpts(title='2014-2021年中国中医类医疗卫生机构诊疗量')
设置了图表的标题为 "2014-2021年中国中医类医疗卫生机构诊疗量"。legend_opts
:用于设置图例的相关选项,如图例的位置。在这里,使用了opts.LegendOpts(pos_left='45%')
将图例的位置设置为距离左边边距的 45%,即图例位于图表的右半部分。tooltip_opts
:用于设置提示框的相关选项,如触发方式和指示器类型。在这里,使用了opts.TooltipOpts(trigger='axis', axis_pointer_type='cross')
设置当鼠标悬停在数据点上时,显示数据点所对应的所有系列数据,并以十字准星指示器的形式显示。toolbox_opts
:用于设置工具栏的相关选项,如是否显示工具栏。在这里,使用了opts.ToolboxOpts(is_show=True)
显示工具栏。
.set_global_opts( #设置全局配置项
title_opts=opts.TitleOpts(title='2014-2021年中国中医类医疗卫生机构诊疗量'), #标题名称
legend_opts=opts.LegendOpts(pos_left='45%' ), #图例距离左边边距:40%
tooltip_opts=opts.TooltipOpts(trigger='axis', axis_pointer_type='cross'), #显示提示框组件
toolbox_opts=opts.ToolboxOpts(is_show=True) #显示工具栏
)
创建折线图
使用 pyecharts 中的 Line 类来创建折线图,并添加了相关的数据和配置。
add_xaxis
方法用于添加 x 轴的数据,这里使用了变量x_data
来指定 x 轴的数据。add_yaxis
方法用于添加 y 轴的数据,其中:- 第一个参数是折线图的图例名称,这里设置为 "同比增速(%)"。
- 第二个参数是折线图的数据,这里使用了一个列表来指定折线图的数据点。
yaxis_index=2
表示该折线图使用的是第二个 y 轴(通过前面的扩展坐标轴)。这样可以在同一张图表中同时显示柱状图和折线图,且分别使用不同的 y 轴。color="#675bba"
设置折线的颜色为 "#675bba"。label_opts=opts.LabelOpts(is_show=False)
表示不显示折线图上的数据标签。
line = (
Line()
.add_xaxis(x_data) #导入x轴
.add_yaxis(
"同比增速(%)", #折线图图例名称
[7.40,4.00,5.83,5.81,5.16,8.63,-9.13,13.66], #折线图数据
yaxis_index=2, #表示y轴的索引,用于拥有多个y轴的单图表中。
color="orange", #折线颜色
label_opts=opts.LabelOpts(is_show=False), #不显示柱形图数据
)
)
通过这段代码,可以将指定的数据绘制成一条折线,并将其添加到图表中。折线图的 x 轴数据由 add_xaxis
方法指定,y 轴数据由 add_yaxis
方法指定。最终的效果是在图表中显示一条折线,用以表示相应的数据趋势。
创建一个网格图
使用 pyecharts 中的 Grid 类来创建一个网格图,并将柱状图和折线图放置在同一个图表中进行展示。
-
bar.overlap(line)
将柱状图和折线图叠加在一起,实现两者同时显示在同一个坐标系中。 -
创建一个 Grid 对象,并使用
grid.add
方法将叠加后的柱状图和折线图添加到网格中。这里通过设置pos_left="10%"
和pos_right="10%"
来调整画布距离左边和右边的空白间隔。 -
grid.render_notebook()
将网格图渲染到 notebook 中进行展示。
bar.overlap(line)
grid = Grid()
grid.add(bar, opts.GridOpts(pos_left="10%", pos_right="10%"), is_control_axis_index=True) #调整画布距离左边10%,距右边10%
grid.render_notebook() #渲染到nontebook中展示
或者也可以渲染为HTML文件
bar.overlap(line).render("2014-2021年中国中医类医疗卫生机构诊疗量.html")
详细代码如下:
from pyecharts import options as opts
from pyecharts.charts import Bar, Grid, Line
x_data = ['2014年','2015年','2016年','2017年','2018年','2019年','2020年','2021年'] #x轴标签
bar = (
Bar()
.add_xaxis(x_data) #导入x轴
.add_yaxis(
"诊疗量(万人次)", #柱形图图例名
[87430, 90912, 96225, 101885, 107147, 116390, 105764, 120215], #柱形图数据
yaxis_index=0, #表示y轴的索引,用于拥有多个y轴的单图表中。
color="pink",
).set_series_opts(
itemstyle_opts=opts.ItemStyleOpts( #图元样式配置项
opacity=0.5), #设置柱形图透明度:0.5
)
.extend_axis(
yaxis=opts.AxisOpts(
name="诊疗量(万人次)", #柱形图y轴名称
type_="value",
position="left", #柱形图y轴在左边显示
axisline_opts=opts.AxisLineOpts(
linestyle_opts=opts.LineStyleOpts(color="blue ") #轴名称颜色
),
)
).set_global_opts( #设置全局配置项
title_opts=opts.TitleOpts(title='2014-2021年中国中医类医疗卫生机构诊疗量'), #标题名称
legend_opts=opts.LegendOpts(pos_left='45%' ), #图例距离左边边距:40%
tooltip_opts=opts.TooltipOpts(trigger='axis', axis_pointer_type='cross'), #显示提示框组件
toolbox_opts=opts.ToolboxOpts(is_show=True) #显示工具栏
)
.extend_axis(
yaxis=opts.AxisOpts(
type_="value",
name="同比增速(%)", #折线图y轴名称
position="right", #折线图y轴在右边显示
axisline_opts=opts.AxisLineOpts(
linestyle_opts=opts.LineStyleOpts(color="green") #轴名称颜色
)
)
)
)
line = (
Line()
.add_xaxis(x_data) #导入x轴
.add_yaxis(
"同比增速(%)", #折线图图例名称
[7.40,4.00,5.83,5.81,5.16,8.63,-9.13,13.66], #折线图数据
yaxis_index=2, #表示y轴的索引,用于拥有多个y轴的单图表中。
color="orange", #折线颜色
label_opts=opts.LabelOpts(is_show=False), #不显示柱形图数据
)
)
bar.overlap(line)
grid = Grid()
grid.add(bar, opts.GridOpts(pos_left="10%", pos_right="10%"), is_control_axis_index=True) #调整画布距离左边10%,距右边10%
grid.render_notebook() #渲染到nontebook中展示
# 将折线图与柱状图结合并渲染为HTML文件
# bar.overlap(line).render("2014-2021年中国中医类医疗卫生机构诊疗量.html")
效果图如下: