pyecharts
pyecharts 是一个用于绘制 Echarts 图表的 Python 库。Echarts 是由百度开发的一个开源数据可视化库,支持各种图表类型,如柱状图、折线图、饼图等,并且提供了丰富的交互功能和精美的图形设计。
pyecharts 的主要优点包括:
- 简单易用:提供了简洁的 API 来创建和定制图表。
- 丰富的图表类型:支持 Echarts 所有的图表类型,能够满足各种数据可视化的需要。
- 交互性:生成的图表具有良好的交互性,用户可以在浏览器中对图表进行缩放、拖动等操作。
- 跨平台:生成的图表是基于 HTML 和 JavaScript 的,因此可以在任何支持现代 Web 浏览器的平台上查看。
pyecharts绘制图形的基本参数
Bar 参数
add_xaxis(xaxis_data):添加X轴数据。
add_yaxis(series_name, y_axis, color=None):添加Y轴数据,包括系列名称、数值列表以及颜色。
extend_axis(yaxis=opts.AxisOpts(...)):扩展Y轴,用于添加多个Y轴。
set_global_opts(title_opts=opts.TitleOpts(...), legend_opts=opts.LegendOpts(...), ...):设置全局选项,例如标题、图例、工具箱等。
其他可能用到的参数有:
mark_point 和 mark_line:用于标记点和线。
animation_opts:控制动画效果。
bar_category_gap:类别间的间距。
bar_width:柱子宽度。
label_opts:标签样式选项。
tooltip_opts:提示框样式选项。
Line 参数
add_xaxis(xaxis_data):添加X轴数据。
add_yaxis(series_name, y_axis, color=None):添加Y轴数据,包括系列名称、数值列表以及颜色。
extend_axis(yaxis=opts.AxisOpts(...)):扩展Y轴,用于添加多个Y轴。
set_global_opts(title_opts=opts.TitleOpts(...), legend_opts=opts.LegendOpts(...), ...):设置全局选项,例如标题、图例、工具箱等。
其他可能用到的参数有:
mark_point 和 mark_line:用于标记点和线。
symbol:折线上的标记图形。
symbol_size:标记图形大小。
yaxis_index:指定使用的Y轴索引。
label_opts:标签样式选项。
tooltip_opts:提示框样式选项。
实例代码
```python
# 导入pyecharts库中的options模块和所需的图表类型(Bar, Line, Pie, Radar, Grid)
from pyecharts import options as opts
from pyecharts.charts import Bar, Line, Pie, Radar, Grid
# 插入柱形图的x轴数据(年份)
x_data = ['2014', '2015', '2016', '2017', '2018', '2019', '2020', '2021']
# 创建并配置柱形图
bar = (
Bar()
# 配置x轴与第一个y轴(诊疗量)
.add_xaxis(x_data)
.add_yaxis(
"诊疗量",
[87430, 90912, 96225, 101885, 107147, 116390, 105764, 120215],
yaxis_index=0,
z=0,
color="orange",
label_opts=opts.LabelOpts(is_show=False)
)
# 拓展并配置第二个y轴(同比增速(%))
.extend_axis(
yaxis=opts.AxisOpts(
type_="value",
name="同比增速(%)",
name_location="center",
name_gap=30,
min_=-20,
max_=20,
axislabel_opts=opts.LabelOpts(font_size=14),
# 设置刻度样式
axisline_opts=opts.AxisLineOpts(
linestyle_opts=opts.LineStyleOpts(color="black")
),
splitline_opts=opts.SplitLineOpts(
is_show=True, linestyle_opts=opts.LineStyleOpts(opacity=1)
),
)
)
# 设置全局配置,包括y轴、标题、图例和提示框选项
.set_global_opts(
yaxis_opts=opts.AxisOpts(
name="诊疗量(万人次)",
name_location="center",
name_gap=60,
min_=0,
interval=50000,
axislabel_opts=opts.LabelOpts(font_size=14),
offset=0,
axisline_opts=opts.AxisLineOpts(
linestyle_opts=opts.LineStyleOpts(color="black")
),
),
title_opts=opts.TitleOpts(title="2014-2021年中国中医类医疗卫生机构诊疗量", pos_left="35%", pos_top="2%"),
legend_opts=opts.LegendOpts(is_show=False),
tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
)
)
# 绘制折线图
line = (
Line()
.add_xaxis(x_data)
.add_yaxis(
"同比增速(%)",
[7.40, 4.00, 5.83, 5.81, 5.16, 8.63, -9.13, 13.66],
symbol='triangle',
symbol_size=15,
yaxis_index=1,
color="Magenta",
label_opts=opts.LabelOpts(is_show=False),
)
)
# 绘制饼图
pie_demo = (
Pie()
.add("", [('20岁以下', 2.2), ('20-29岁', 27.9),
('31-40岁', 56.2), ('41-50岁', 10.9),
('51岁以上', 2.8)],
center=["18%", "75%"],
radius=[30, 56], # 设置内圆与外圆半径
label_opts=opts.LabelOpts(formatter="{b}: {d}%"))
# 配置标题
.set_global_opts(title_opts=opts.TitleOpts(title="中药材消费者画像", pos_left="10%", pos_top="54%"),
legend_opts=opts.LegendOpts(is_show=False))
)
# 绘制堆积柱形图
data1 = (20.3, 22.0, 23.5, 22.5, 22.3)
data2 = (79.7, 78.0, 76.5, 77.5, 77.7)
bar1 = (
Bar()
# 配置x轴与y轴
.add_xaxis(['2019', '2020', '2021', '2022', '2023'])
.add_yaxis("供应商A", data1, stack="stack1", xaxis_index=1, yaxis_index=2)
.add_yaxis("供应商B", data2, stack="stack1", xaxis_index=1, yaxis_index=2)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
yaxis_opts=opts.AxisOpts(
min_=0,
max_=120,
interval=25
),
title_opts=opts.TitleOpts(title="全国药店中药饮片供应商占比", pos_left='40%', pos_top='54%'),
legend_opts=opts.LegendOpts(is_show=False),
xaxis_opts=opts.AxisOpts(max_=4)
)
)
# 将柱形图和折线图进行重叠
overlap = bar.overlap(line)
# 创建网格布局,并添加各个图表
grid = (
Grid()
.add(overlap, grid_opts=opts.GridOpts(pos_bottom="55%", pos_right="5%", pos_left="5%", pos_top="5%"),
is_control_axis_index=True)
.add(pie_demo, grid_opts=opts.GridOpts(pos_bottom="10%", pos_right="30%", pos_left="50%", pos_top="65%"))
.add(bar1, grid_opts=opts.GridOpts(pos_bottom="10%", pos_right="15%", pos_left="25%", pos_top="5%"),
is_control_axis_index=True)
)
# 在Jupyter Notebook中渲染图表
grid.render_notebook()
```
这段代码首先导入了pyecharts库中的相关模块和图表类型,然后分别创建并配置了柱形图、折线图、饼图和堆积柱形图。最后,使用Grid组件将这些图表组合在一起,并在Jupyter Notebook中进行渲染显示。
运行结果