- 第一步:打开终端在anaconda prompt命令行工具下,通过pip清华镜像源安装pyecharts
- 第二步:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyecharts
学习的官网地址:
- echarts官网:https://www.echartsjs.com/index.html
- Echarts快速入门:http://echarts.apache.org/zh/index.html
- pyecharts官网:https://pyecharts.org/#/zh-cn/intro
- pyecharts众多图表示例代码:https://gallery.pyecharts.org/#/README
- pyecharts github项目国内镜像: https://gitee.com/mirrors/pyecharts
主要任务:
柱形图和折线图的组合图表
首先导入所需要的库
from pyecharts import options as opts
from pyecharts.charts import Bar, Grid, Line
第一个库是使用 options 配置项,在 pyecharts 中,一切皆 Options。
第二个库导入的有三个分别是Bar、Grid、Line意思分别是柱形图、组合图表、折线图。
准备共享x轴的数据 x轴的值为列表,包含每个年份(2014-2021)
bar = Bar() 初始化
定义数据为列表类型
x_data = ["{}年".format(i) for i in range(2014, 2022)]
bar = (
Bar()
.add_xaxis(x_data)
第一个y轴的数据。左y轴的值、标签、颜色、透明度。
LabelOpts对应class LabelOpts 中的 类名,label_opts需要把LabelOpts中的L与O小写前面加_(下划线)即可,以下皆是如此。
.add_yaxis(
"诊疗量(万人次)", # 轴名
[87430,90912,96225,101885,107147,116390,105764,120215], # Y轴数据
color="#5793f3", ) # 颜色
# 增加系列配置
.set_series_opts(
itemstyle_opts={"opacity":0.5}, #透明度
label_opts = opts.LabelOpts(is_show = False)) # 是否显示标签
左纵坐标 (AxisOpts:坐标轴配置项)
.extend_axis添加扩展轴,并且通过往yaxis参数传参实现y轴的扩展
.extend_axis(
yaxis=opts.AxisOpts(
name="诊疗量(万人次)", # 坐标名
min_=70000, # 设定最小值
max_=130000, # 设定最大值
position="left", # 自定义坐标轴是左侧
axislabel_opts=opts.LabelOpts(formatter="{value}"), # 设定坐标轴数值
)
)
右纵坐标
.extend_axis(
yaxis=opts.AxisOpts(
name="同比增速(%)", # 坐标名
min_=-20, # 设定最小值
max_=20, # 设定最大值
position="right", # 自定义坐标轴是右侧
axisline_opts=opts.AxisLineOpts(
linestyle_opts=opts.LineStyleOpts(color="#d14a61")
), # 自定义坐标轴数值的颜色
axislabel_opts=opts.LabelOpts(formatter="{value} %"), # 设定坐标轴数值+单位
)
)
set_global_opts:全局配置设置
.set_global_opts(
yaxis_opts=opts.AxisOpts(
name="诊疗量(万人次)", # 坐标名
min_=70000, # 设定最小值
max_=130000, # 设定最大值
position="left", # 自定义坐标轴是左侧
offset=0, #Y 轴相对于默认位置的偏移,在相同的 position 上有多个 Y 轴的时候有用。
axisline_opts=opts.AxisLineOpts(
linestyle_opts=opts.LineStyleOpts(color="#5793f3") # 自定义坐标轴数值的颜色
),
axislabel_opts=opts.LabelOpts(formatter="{value}"), # 设定坐标轴数值
),
# 标题配置项 title:主标题 副标题:subtitle pos_right:工具栏组件离容器右侧的距离。
title_opts=opts.TitleOpts(title="中国中医类医疗卫生机构诊疗量", subtitle="2014-2021年",pos_right=5),
# # 提示框配置项
# trigger:触发类型。可选:
#'item': 数据项图形触发,主要在散点图,饼图等无类目轴的图表中使用。
# 'axis': 坐标轴触发,主要在柱状图,折线图等会使用类目轴的图表中使用。
# 'none': 什么都不触发
#axis_pointer_type:指示器类型。可选:
# 'line':直线指示器
# 'shadow':阴影指示器
# 'none':无指示器
# 'cross':十字准星指示器。其实是种简写,表示启用两个正交的轴的 axisPointer。
tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
)
)
绘制组合图表中的折线图
line = Line() 初始化
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], # y轴数据
# 指定哪些 yAxis 被控制。如果缺省则控制所有的 y 轴。
# 如果设置为 false 则不控制任何y轴。如果设置成 3 则控制 axisIndex 为 3 的 y 轴。
# 如果设置为 [0, 3] 则控制 axisIndex 为 0 和 3 的 y 轴。
yaxis_index=2, # 索引
color="#675bba", # 设置折线的颜色
label_opts=opts.LabelOpts(is_show=True), # 是否显示标签
# 图形的z值,控制图形的前后顺序,z值大的图形会展示在z值小的前面 默认的z值为2.
z=3,
)
)
创建组合图表
grid = Grid()
grid.add(bar, opts.GridOpts(pos_left="10%", pos_right="10%"), is_control_axis_index=True)
grid.render()
# render 会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件也可以传入路径参数,如 bar.render("mycharts.html") bar.render()
# 如要在notebook里面显示图表则:bar.overlap(line).render_notebook()
bar.overlap(line).render_notebook()
render 会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件也可以传入路径参数,如 bar.render("mycharts.html") bar.render()
如要在notebook里面显示图表则:bar.overlap(line).render_notebook()
完整代码如下:
# 导入所需的库
# 第一个库是使用 options 配置项,在 pyecharts 中,一切皆 Options。
# 第二个库导入的有三个分别是Bar、Grid、Line意思分别是柱形图、组合图表、折线图
from pyecharts import options as opts
from pyecharts.charts import Bar, Grid, Line
#x轴的值为列表,包含每个年份
# bar = Bar() 初始化
# 定义数据为列表类型
x_data = ["{}年".format(i) for i in range(2014, 2022)]
# 柱形图
bar = (
Bar()
.add_xaxis(x_data)
#第一个y轴的数据。左y轴的值、标签、颜色、透明度。
.add_yaxis(
"诊疗量(万人次)", # 轴名
[87430,90912,96225,101885,107147,116390,105764,120215], # Y轴数据
color="#5793f3", ) # 颜色
# 增加系列配置
.set_series_opts(
itemstyle_opts={"opacity":0.5}, #透明度
label_opts = opts.LabelOpts(is_show = False)) # 是否显示标签
#左纵坐标 (AxisOpts:坐标轴配置项)
.extend_axis(
yaxis=opts.AxisOpts(
name="诊疗量(万人次)", # 坐标名
min_=70000, # 设定最小值
max_=130000, # 设定最大值
position="left", # 自定义坐标轴是左侧
axislabel_opts=opts.LabelOpts(formatter="{value}"), # 设定坐标轴数值
)
)
#右纵坐标
.extend_axis(
yaxis=opts.AxisOpts(
name="同比增速(%)", # 坐标名
min_=-20, # 设定最小值
max_=20, # 设定最大值
position="right", # 自定义坐标轴是右侧
axisline_opts=opts.AxisLineOpts(
linestyle_opts=opts.LineStyleOpts(color="#d14a61")
), # 自定义坐标轴数值的颜色
axislabel_opts=opts.LabelOpts(formatter="{value} %"), # 设定坐标轴数值+单位
)
)
# set_global_opts:全局配置设置
.set_global_opts(
yaxis_opts=opts.AxisOpts(
name="诊疗量(万人次)", # 坐标名
min_=70000, # 设定最小值
max_=130000, # 设定最大值
position="left", # 自定义坐标轴是左侧
offset=0, #Y 轴相对于默认位置的偏移,在相同的 position 上有多个 Y 轴的时候有用。
axisline_opts=opts.AxisLineOpts(
linestyle_opts=opts.LineStyleOpts(color="#5793f3") # 自定义坐标轴数值的颜色
),
axislabel_opts=opts.LabelOpts(formatter="{value}"), # 设定坐标轴数值
),
# 标题配置项 title:主标题 副标题:subtitle pos_right:工具栏组件离容器右侧的距离。
title_opts=opts.TitleOpts(title="中国中医类医疗卫生机构诊疗量", subtitle="2014-2021年",pos_right=5),
# # 提示框配置项
# trigger:触发类型。可选:
#'item': 数据项图形触发,主要在散点图,饼图等无类目轴的图表中使用。
# 'axis': 坐标轴触发,主要在柱状图,折线图等会使用类目轴的图表中使用。
# 'none': 什么都不触发
#axis_pointer_type:指示器类型。可选:
# 'line':直线指示器
# 'shadow':阴影指示器
# 'none':无指示器
# 'cross':十字准星指示器。其实是种简写,表示启用两个正交的轴的 axisPointer。
tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
)
)
# 折线图
# line = Line() 初始化
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], # y轴数据
# 指定哪些 yAxis 被控制。如果缺省则控制所有的 y 轴。
# 如果设置为 false 则不控制任何y轴。如果设置成 3 则控制 axisIndex 为 3 的 y 轴。
# 如果设置为 [0, 3] 则控制 axisIndex 为 0 和 3 的 y 轴。
yaxis_index=2,
color="#675bba", # 设置折线的颜色
label_opts=opts.LabelOpts(is_show=True), # 是否显示标签
# 图形的z值,控制图形的前后顺序,z值大的图形会展示在z值小的前面 默认的z值为2.
z=3,
)
)
# 创建组合图表
grid = Grid()
grid.add(bar, opts.GridOpts(pos_left="10%", pos_right="10%"), is_control_axis_index=True)
grid.render()
# render 会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件也可以传入路径参数,如 bar.render("mycharts.html") bar.render()
# 如要在notebook里面显示图表则:bar.overlap(line).render_notebook()
bar.overlap(line).render_notebook()
饼图
# 导入所需的库
# 第一个库是使用 options 配置项,在 pyecharts 中,一切皆 Options。
# 第二个库导入的是绘制饼图的库
from pyecharts import options as opts
from pyecharts.charts import Pie
# pie = Pir() 初始化
pie = (
Pie()
.add("",[('化学药',33),('中成药',45),('生物制品',3),('保健品',9),('中药饮片',6),('其他',4)]) # 自定义标签与数据
.set_colors(["blue", "green", "yellow", "red", "pink", "orange", "purple"]) # 自定义标签颜色(一一对应)
.set_global_opts(title_opts=opts.TitleOpts(title="饼图展示")) # 设置标题(全局配置项:set_global_opts)
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) # 标签配置项LabelOpts 标签:数值
)
pie.render_notebook()
环图
# 导入所需的库
# 第一个库是使用 options 配置项,在 pyecharts 中,一切皆 Options。
# 第二个库导入的是绘制饼图的库
from pyecharts import options as opts
from pyecharts.charts import Pie
# pie = Pir() 初始化
x_data = ['化学药','中成药','生物制品','保健品','中药饮片','其他']
y_data = [335, 310, 234, 135, 1548]
P = (
Pie()
.add("",
data_pair=[list(z) for z in zip(x_data, y_data)], # 导入数据
#极坐标系的半径。可以为如下类型:
# number:直接指定外半径值。
# string:例如,'20%',表示外半径为可视区尺寸(容器高宽中较小一项)的 20% 长度。
# Array.<number|string>:数组的第一项是内半径,第二项是外半径。每一项遵从上述 number string 的描述。
radius=["40%", "75%"],
label_opts=opts.LabelOpts(is_show=False, position="center"), # 设置:是否显示标签、标签位置
)
.set_global_opts(title_opts=opts.TitleOpts(title="环图展示")) # 设置标题
.set_series_opts(
tooltip_opts=opts.TooltipOpts(
# 提示框配置项
# trigger:触发类型。可选:
#'item': 数据项图形触发,主要在散点图,饼图等无类目轴的图表中使用。
# 'axis': 坐标轴触发,主要在柱状图,折线图等会使用类目轴的图表中使用。
# 'none': 什么都不触发
trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)"),
# 标签配置项LabelOpts 标签:数值
label_opts=opts.LabelOpts(formatter="{b}: {c}"),
)
)
P.render_notebook()