在jupyter Notebook 中运行Pyecharts的相关代码
首先在anaconda prompt命令行工具下,通过pip清华镜像源安装pyecharts
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyecharts
# echarts官网:https://www.echartsjs.com/index.html
# pyecharts官网:https://pyecharts.org/#/zh-cn/intro
# pyecharts众多图表示例代码:https://gallery.pyecharts.org/#/README
# pyecharts github项目国内镜像: https://gitee.com/mirrors/pyecharts
安装如下
如果在jupyter Notebook输入以下代码报错,只好搜索其他方式安装Pyecharts
在pyecharts官网:https://pyecharts.org/#/zh-cn/intro 中搜索实例复制代码进行修改,例如
from pyecharts import options as opts
from pyecharts.charts import Bar
c = (
Bar()
.add_xaxis(
[
"名字很长的X轴标签1",
"名字很长的X轴标签2",
"名字很长的X轴标签3",
"名字很长的X轴标签4",
"名字很长的X轴标签5",
"名字很长的X轴标签6",
]
)
.add_yaxis("商家A", [10, 20, 30, 40, 50, 40])
.add_yaxis("商家B", [20, 10, 40, 30, 40, 50])
.set_global_opts(
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
title_opts=opts.TitleOpts(title="Bar-旋转X轴标签", subtitle="解决标签名字过长的问题"),
)
)
c.render_notebook()
其中的render_notebook()方法,将图表渲染到jupyter Notebook工具中
c.render_notebook()
运行结果如下
其中的配置项
以上每个类都可以通过与之同名的构造方法创建实例
全局配置项:set_global_opts( )
该方法各参数含义如下:
title_opts :表示标题组件的配置项
legend_opts:表示图例组件的配置项
tooltip_opts : 表示提示框组件的配置项
toolbox_opts :表示工具箱组件的配置项
brush_opts:表示区域选择组件的配置项
xaxis_opts,yaxis_opts:表示x轴、y轴的配置项
visualmap_opts :表示视觉映射组件的配置项
datazoom_opts :表示数据区域缩放组件的配置项
系列配置项
ItemStyleOpta 图元样式配置项
TextStyleOpts 文本样式配置项
LabelOpta 标签配置项
LineStyloOpts 线条样式配置项
SplitLineOpts 分割线配置项
MarkPointOpta 标记点配置项
MarkLineOpts 标记线配置项
Mark AreaOpts 标记区域配置项
EffectOpts 涟漪特效配置项
AreaStyleOpta 区域填充样式配置项
SplitAreaOpts 分隔区域配置项
GridOpts 直角坐标系网格配置项
下面进入实例:
一,到pyecharts官网找到有两个x轴的柱状图(Bar - Mixed_bar_and_line)再对其中的数据与图表元素进行修改
折线图与柱状图中的参数
series_name:表示系列的名称,显示于提示框和图例中。
y_axis :表示系列数据。
xaxis_index:表示x轴的索引,用于拥有多个x轴的单图表中
yaxis_index:表示y轴的索引,用于拥有多个y轴的单图表中。
color:表示系列的注释文本的颜色。
is_symbol_show:表示是否显示标记及注释文本,默认为 True。
symbol: 表示标记的图形,可以取值为'circle'(园形)、'rect'( 矩形)、'roundRect'( 圆角矩形)、'triangle'(三角形)、'diamond'(菱形)、'pin'( 大头针)、'arrow'( 箭头)、'none'( 无)。
symbol_size :表示标记的大小,可以接收单一数值,也可以接收形如 [width, height]的数组。
stack :表示将轴上同一类目的数据堆叠放置。
is_smooth :表示是否使用平滑曲线。
is_step:表示是否显示为阶梯图。
导入模块
from pyecharts.charts import Bar, Line
from pyecharts.faker import Faker
from pyecharts import options as opts
准备数据
x_data = ['2014', '2015', '2016', '2017', '2018', '2019', '2020', '2021']
x1 = [87430,90912,96225,101885,107147,116390,105764,120215]
x2 = [7.40,4.00,5.83,5.81,5.16,8.63,-9.13,13.66]
添加x轴和y轴数据
y_axis:在里面加z=0,使折线图在柱形图上面
bar = (
Bar()
.add_xaxis(x_data)
.add_yaxis(
"诊疗量",
x1,
z=0,
color="orange"
)
添加第二条x轴
.extend_axis(
yaxis=opts.AxisOpts(
name="同比增速(%)",
min_= -20, #前面要添加下划线,否则会报错
max_= 20,
axislabel_opts=opts.LabelOpts(formatter="{value}%"),
axisline_opts=opts.AxisLineOpts
(
linestyle_opts=opts.LineStyleOpts(color="black")
),
)
)
线条样式,柱形图标签,标题配置
.set_series_opts(label_opts=opts.LabelOpts(is_show=True))
.set_global_opts
(
yaxis_opts=opts.AxisOpts(
name="诊疗量(万人次)",
axisline_opts=opts.AxisLineOpts(
linestyle_opts=opts.LineStyleOpts(color="black")
)),
title_opts=opts.TitleOpts(title="2014-2021年中国中医类医疗卫生机构诊疗量"),
)
)
创建图表
line = Line().add_xaxis(x_data).add_yaxis("同比增速",
x2,
yaxis_index=1,
label_opts=opts.LabelOpts(is_show=True),
symbol='triangle',
symbol_size=20 )
bar.overlap(line)
bar.render_notebook()
完整代码如下:
from pyecharts.charts import Bar, Line
from pyecharts.faker import Faker
from pyecharts import options as opts
x_data = ['2014', '2015', '2016', '2017', '2018', '2019', '2020', '2021']
x1 = [87430,90912,96225,101885,107147,116390,105764,120215]
x2 = [7.40,4.00,5.83,5.81,5.16,8.63,-9.13,13.66]
bar = (
Bar()
.add_xaxis(x_data)
.add_yaxis(
"诊疗量",
x1,
z=0,
color="orange"
)
.extend_axis(
yaxis=opts.AxisOpts(
name="同比增速(%)",
min_= -20, #前面要添加下划线,否则会报错
max_= 20,
axislabel_opts=opts.LabelOpts(formatter="{value}%"),
axisline_opts=opts.AxisLineOpts
(
linestyle_opts=opts.LineStyleOpts(color="black")
),
)
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=True))
.set_global_opts
(
yaxis_opts=opts.AxisOpts(
name="诊疗量(万人次)",
axisline_opts=opts.AxisLineOpts(
linestyle_opts=opts.LineStyleOpts(color="black")
)),
title_opts=opts.TitleOpts(title="2014-2021年中国中医类医疗卫生机构诊疗量"),
)
)
line = Line().add_xaxis(x_data).add_yaxis("同比增速",
x2,
yaxis_index=1,
label_opts=opts.LabelOpts(is_show=True),
symbol='triangle',
symbol_size=20 )
bar.overlap(line)
bar.render_notebook()
运行结果如下
要求二,三为用饼图和环状图来显示表四内容
到pyecharts官网找到饼图代码(例如:Pie - Pie_set_color)再对其中的数据与图表元素进行修改
饼图或圆环图的参数
series_name:表示系列的名称,显示于提示框和图例中。
data_pair:表示系列数据帧,可以接收形如[(key1, value1),(key2, value2),…]的数据。
radius:表示饼图的半径,可以接收一个包含两个元素的数组,其中数组的第一项为内半径, 第二项为外半径。
center:表示饼图的中心坐标。
is_clockwise :表示饼图的扇区是否按顺时针排布。
itemstyle_opts :表示图元样式配置项。
完整代码如下
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker
# 添加标签与数值
labels = [('化学药', 33),
('中成药', 45),
('生物制品', 3),
('保健品', 9),
('中药饮片', 6),
('其他', 4)]
c = (
Pie() # 创建Pie类的对象
.add("",labels)
.set_colors(["blue", "green", "yellow", "red", "pink", "orange", "purple"])
.set_global_opts(title_opts=opts.TitleOpts(title="Pie-设置颜色")) #标题设置
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)
# 渲染到notebook
c.render_notebook()
运行结果如下
环形图也相同(例如:Pie - Pie_rich_label)
完整代码如下
#导入模块
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker
# 添加标签与数值
labels = [('化学药', 33),
('中成药', 45),
('生物制品', 3),
('保健品', 9),
('中药饮片', 6),
('其他', 4)]
#链式调用
c = (
Pie() #创建Pie类的对象
.add(
"",
labels,
radius=["40%", "55%"], #饼图的半径,数组的第一项是内半径,第二项是外半径
label_opts=opts.LabelOpts( #label_opts设置标签框
position="outside",
formatter="{a|{a}}{abg|}\n{hr|}\n {b|{b}: }{c} {per|{d}%} ",
background_color="#eee",
border_color="#aaa",
border_width=1,
border_radius=4,
rich={
"a": {"color": "#999", "lineHeight": 22, "align": "center"}, #rich设置环图样式
"abg": {
"backgroundColor": "#e3e3e3",
"width": "100%",
"align": "right",
"height": 22,
"borderRadius": [4, 4, 0, 0],
},
"hr": {
"borderColor": "#aaa",
"width": "100%",
"borderWidth": 0.5,
"height": 0,
},
"b": {"fontSize": 16, "lineHeight": 33},
"per": {
"color": "#eee",
"backgroundColor": "#334455",
"padding": [2, 4],
"borderRadius": 2,
},
},
),
)
.set_global_opts(title_opts=opts.TitleOpts(title="Pie-富文本示例")) #主标题设置
)
c.render_notebook()
运行结果如下: