使用pyecharts进行开发前,开发者需要先在本地计算机安装pyecharts。
安装步骤:打开Anaconda Prompt工具,通过pip清华镜像源安装pyecharts,在命令行输入:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyecharts
Pyecharts官网:
echarts官网:https://www.echartsjs.com/index.html
pyecharts官网:https://pyecharts.org/#/zh-cn/intro
pyecharts众多图表示例代码:https://gallery.pyecharts.org/#/README
使用Pyecharts完成以下任务:
需求一:请用一张独立画布,柱形图和折线图融合在同一个坐标系展示表1数据
导入所需模块
#导入所需模块
from pyecharts import options as opts
#导入需要用到的图类表(柱形图,组合图,折线图)
from pyecharts.charts import Bar, Grid, Line
设置共享的x轴(x_data)以及为柱形图表Bar实例填充数据
x_data = ["{}月".format(i) for i in range(2014,2022)]
bar = (
Bar()
.add_xaxis(x_data)
.add_yaxis(
"诊疗量(万人次)",
[87430,90912,96225,101885,107147,116390,105764,120215],
yaxis_index=0, #表示y轴的索引,用于拥有多个y轴的单图表中
color="#d14a61", #柱形图颜色
)
自定义左纵坐标轴和右纵坐标轴
.extend_axis(
yaxis=opts.AxisOpts(
name="诊疗量(万人次)",
type_="value", #'value': 数值轴,适用于连续数据
min_=0, #设置左纵坐标轴的刻度值最低范围为0
max_=125000, #设置左纵坐标轴的刻度值最高范围为125000
interval=25000, #设置左纵坐标轴的刻度值范围的等分间隔为25000
position="left", #自定义在左纵坐标轴
axisline_opts=opts.AxisLineOpts(
linestyle_opts=opts.LineStyleOpts(color="#d14a61") #坐标轴数值颜色
),
axislabel_opts=opts.LabelOpts(formatter="{value} "),
)
)
.extend_axis(
yaxis=opts.AxisOpts(
type_="value", #'value': 数值轴,适用于连续数据
name="同比增速(%)",
min_=-20, #设置右纵坐标轴的刻度值最低范围为-20
max_=20, #设置右纵坐标轴的刻度值最高范围为20
position="right", #自定义在右坐标轴
axisline_opts=opts.AxisLineOpts(
linestyle_opts=opts.LineStyleOpts(color="#675bba") #坐标轴数值颜色
),
axislabel_opts=opts.LabelOpts(formatter="{value} %"),
splitline_opts=opts.SplitLineOpts(
is_show=False, linestyle_opts=opts.LineStyleOpts(opacity=1) #SplitLineOpts:分割线配置项,is_show表示是否显示分割线
),
)
)
坐标轴类型(type):
'value': 数值轴,适用于连续数据。
'category': 类目轴,适用于离散的类目数据,为该类型时必须通过 data 设置类目数据。
'time': 时间轴,适用于连续的时序数据,与数值轴相比时间轴带有时间的格式化,在刻度计算上也有所不同。
'log': 对数轴。适用于对数数据。
设置系统配置项
#系统配置项
.set_series_opts(
itemstyle_opts={"opacity":0.5}) #设置柱形图的透明度
设置全局配置项
#全局配置项
.set_global_opts(
yaxis_opts=opts.AxisOpts(
name="诊疗量(万人次)", #坐标轴名称
min_=0, #设置左纵坐标轴的刻度值最低范围为0
max_=125000, #设置左纵坐标轴的刻度值最高范围为125000
interval=25000, #设置左纵坐标轴的刻度值范围的等分间隔为25000
position="left", #将坐标轴定义在左侧
offset=0,
axisline_opts=opts.AxisLineOpts(
linestyle_opts=opts.LineStyleOpts(color="#5793f3")
),
axislabel_opts=opts.LabelOpts(formatter="{value} "),
),
title_opts=opts.TitleOpts(title="2014-2021年中国中医类医疗卫生机构诊疗量"), #标题配置项
tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross" ),
#提示框配置项
# axis_pointer_type:指示器类型
# 'line':直线指示器
# 'shadow':阴影指示器
# 'none':无指示器
# 'cross':十字准星指示器。其实是种简写,表示启用两个正交的轴的 axisPointer。
legend_opts=opts.LegendOpts(pos_left="65%"),) #图例配置项,将图例组件设置离容器左侧的距离为65%
)
为折线图表Line实例填充数据
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="#675bba",
label_opts=opts.LabelOpts(is_show=True), #标签配置项,是否显示标签
symbol='triangle', #表示将折线图上的标记设为三角形
symbol_size=15, #表示标记的大小
)
)
symbol:表示标记的图形
'circle'(圆形)、'rect'(矩形)、'roundRect'(圆角矩形)、'triangle'(三角形)、'diamond'(菱形)、'pin'( 大头针)、'arrow'(箭头)、'none'(无)。
创建组合表Grid
#创建组合图表
bar.overlap(line)
grid = Grid()
#pos_left="5%", pos_right="20%":grid 组件离容器左侧或右侧的距离。 is_control_axis_index=True:是否由自己控制 Axis 索引
grid.add(bar, opts.GridOpts(pos_left="5%", pos_right="20%"), is_control_axis_index=True)
渲染图表
#渲染图表
bar.overlap(line).render_notebook() ##直接渲染到notebook
渲染图表有两个方法:
rander()方法用于将图表渲染到HTML文件,语法如下:
render(self,path="render.html",template name="simple_chart.htmI’,env=None,**kwargs)
rander()中的参数 path表示生成文件的路径,默认为render.html;template_name 表示模板的路径。render()方法会返回 HTML文件的路径字符串。
rander_notebook()方法用于将图表渲染于Jupyter Notebook工具中,它无需接受任何参数。语法如下:
bar.render_notebok() #bar为图表类型,bar(柱形图)
完整代码:
#导入所需模块
from pyecharts import options as opts
#导入需要用到的图类表(柱形图,组合图,折线图)
from pyecharts.charts import Bar, Grid, Line
x_data = ["{}月".format(i) for i in range(2014,2022)]
bar = (
Bar()
.add_xaxis(x_data)
.add_yaxis(
"诊疗量(万人次)",
[87430,90912,96225,101885,107147,116390,105764,120215],
yaxis_index=0, #表示y轴的索引,用于拥有多个y轴的单图表中
color="#d14a61", #柱形图颜色
)
.extend_axis(
yaxis=opts.AxisOpts(
name="诊疗量(万人次)",
type_="value", #'value': 数值轴,适用于连续数据
min_=0, #设置左纵坐标轴的刻度值最低范围为0
max_=125000, #设置左纵坐标轴的刻度值最高范围为125000
interval=25000, #设置左纵坐标轴的刻度值范围的等分间隔为25000
position="left", #自定义在左纵坐标轴
axisline_opts=opts.AxisLineOpts(
linestyle_opts=opts.LineStyleOpts(color="#d14a61") #坐标轴数值颜色
),
axislabel_opts=opts.LabelOpts(formatter="{value} "),
)
)
.extend_axis(
yaxis=opts.AxisOpts(
type_="value", #'value': 数值轴,适用于连续数据
name="同比增速(%)",
min_=-20, #设置右纵坐标轴的刻度值最低范围为-20
max_=20, #设置右纵坐标轴的刻度值最高范围为20
position="right", #自定义在右坐标轴
axisline_opts=opts.AxisLineOpts(
linestyle_opts=opts.LineStyleOpts(color="#675bba") #坐标轴数值颜色
),
axislabel_opts=opts.LabelOpts(formatter="{value} %"),
splitline_opts=opts.SplitLineOpts(
is_show=False, linestyle_opts=opts.LineStyleOpts(opacity=1) #SplitLineOpts:分割线配置项,is_show表示是否显示分割线
),
)
)
#系统配置项
.set_series_opts(
itemstyle_opts={"opacity":0.5}) #设置柱形图的透明度
#全局配置项
.set_global_opts(
yaxis_opts=opts.AxisOpts(
name="诊疗量(万人次)", #坐标轴名称
min_=0, #设置左纵坐标轴的刻度值最低范围为0
max_=125000, #设置左纵坐标轴的刻度值最高范围为125000
interval=25000, #设置左纵坐标轴的刻度值范围的等分间隔为25000
position="left", #将坐标轴定义在左侧
offset=0,
axisline_opts=opts.AxisLineOpts(
linestyle_opts=opts.LineStyleOpts(color="#5793f3")
),
axislabel_opts=opts.LabelOpts(formatter="{value} "),
),
title_opts=opts.TitleOpts(title="2014-2021年中国中医类医疗卫生机构诊疗量"), #标题配置项
tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross" ),
#提示框配置项
# axis_pointer_type:指示器类型
# 'line':直线指示器
# 'shadow':阴影指示器
# 'none':无指示器
# 'cross':十字准星指示器。其实是种简写,表示启用两个正交的轴的 axisPointer。
legend_opts=opts.LegendOpts(pos_left="65%"),) #图例配置项,将图例组件设置离容器左侧的距离为65%
)
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="#675bba",
label_opts=opts.LabelOpts(is_show=True), #标签配置项,是否显示标签
symbol='triangle', #表示将折线图上的标记设为三角形
symbol_size=15, #表示标记的大小
)
)
#创建组合图表
bar.overlap(line)
grid = Grid()
#pos_left="5%", pos_right="20%":grid 组件离容器左侧或右侧的距离。 is_control_axis_index=True:是否由自己控制 Axis 索引
grid.add(bar, opts.GridOpts(pos_left="5%", pos_right="20%"), is_control_axis_index=True)
#渲染图表
bar.overlap(line).render_notebook() ##直接渲染到notebook
运行结果: