目录
PyeCharts
是一个用于生成 Echarts 图表的 Python 库,Echarts 是由百度开发的一个基于 JavaScript 的开源可视化库。通过 PyeCharts
,我们可以在 Python 中使用类似的数据结构来创建丰富的图表,并将其嵌入到网页或其他支持 HTML 渲染的地方。
一、基础语法结构
PyEcharts 的核心设计理念是链式调用和配置驱动,通过简洁的语法快速生成复杂图表。基础流程如下:
1. 导入库与图表类
from pyecharts.charts import Bar, Line, Pie # 导入图表类型
from pyecharts import options as opts # 导入配置项
2. 创建图表对象
bar = Bar() # 创建一个柱状图对象
3. 添加数据
bar.add_xaxis(["苹果", "香蕉", "草莓"]) # X轴数据
bar.add_yaxis("单价", [10, 5, 20]) # Y轴数据
4. 设置配置项
bar.set_global_opts(
title_opts=opts.TitleOpts(title="商品销售统计"), # 标题
xaxis_opts=opts.AxisOpts(name="商品类别") # X轴标签
)
5. 渲染图表
bar.render("bar_chart.html") # 生成HTML文件
二、常用图表类型及语法示例
1. 柱状图(Bar)
bar = Bar()
bar.add_xaxis(["A", "B", "C"])
bar.add_yaxis("系列1", [10, 20, 30])
bar.add_yaxis("系列2", [15, 25, 35], stack="stack1") # 堆叠柱状图
bar.render("bar.html")
2. 折线图(Line)
line = Line()
line.add_xaxis(["周一", "周二", "周三"])
line.add_yaxis("温度", [25, 30, 28], is_smooth=True) # 平滑曲线
line.set_global_opts(
tooltip_opts=opts.TooltipOpts(trigger="axis") # 提示框配置
)
line.render("line.html")
3. 饼图(Pie)
pie = Pie()
pie.add("", [("苹果", 10), ("香蕉", 5), ("草莓", 20)])
pie.set_global_opts(
legend_opts=opts.LegendOpts(orient="vertical") # 图例垂直显示
)
pie.render("pie.html")
4. 散点图(Scatter)
scatter = Scatter()
scatter.add_xaxis([10, 20, 30, 40, 50])
scatter.add_yaxis("分布", [5, 15, 25, 35, 45])
scatter.set_global_opts(
xaxis_opts=opts.AxisOpts(type_="value") # X轴为数值类型
)
scatter.render("scatter.html")
5. 地图(Map)
from pyecharts.charts import Map
map_chart = Map()
map_chart.add("确诊数", [("广东", 100), ("北京", 80), ("上海", 60)], "china")
map_chart.render("map.html")
三、配置项详解
PyeCharts 的配置分为 全局配置(set_global_opts)和系列配置(set_series_opts),支持 40+ 种配置项。
1. 全局配置项
-
标题:TitleOpts
title_opts=opts.TitleOpts(title="主标题", subtitle="副标题")
-
图例:LegendOpts
legend_opts=opts.LegendOpts(pos_top="10%", orient="horizontal") # 位置与布局
-
工具箱:ToolboxOpts
toolbox_opts=opts.ToolboxOpts(is_show=True, feature=opts.ToolboxFeatureOpts(data_zoom=True)) # 显示缩放工具
-
视觉映射:VisualMapOpts
visualmap_opts=opts.VisualMapOpts(max_=100, min_=0, range_color=["#313695", "#d7191c"]) # 颜色映射
2. 系列配置项
-
标签样式:LabelOpts
label_opts=opts.LabelOpts(is_show=True, position="top", color="blue")
-
标记点:MarkPointOpts
markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max", name="峰值")])
-
线条样式:LineStyleOpts
line_style_opts=opts.LineStyleOpts(color="#FF0000", width=2, type_="dashed")
四、链式调用与API设计优势
PyeCharts 的链式语法使代码更简洁,例如:
(
Bar()
.add_xaxis(["A", "B", "C"])
.add_yaxis("系列", [1, 2, 3])
.set_global_opts(title_opts=opts.TitleOpts(title="链式调用示例"))
.render("chain.html")
)
优势:
-
代码紧凑:减少中间变量,逻辑更清晰。
-
易维护:修改配置时只需调整对应方法。
-
支持Jupyter:直接在 Notebook 中渲染图表。
五、使用示例
1. 复杂关系图
from pyecharts.charts import Graph
nodes = [{"id": "A", "name": "A"}, {"id": "B", "name": "B"}]
links = [{"source": "A", "target": "B"}]
graph = Graph().add("", nodes, links).set_global_opts(title_opts=opts.TitleOpts(title="关系图"))
graph.render("graph.html")
2. 3D散点图
from pyecharts.charts import Scatter3D
data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
scatter3d = Scatter3D().add("点", data).set_global_opts(
visualmap_opts=opts.VisualMapOpts(max_=9, min_=1)
)
scatter3d.render("scatter3d.html")
3. 仪表盘
from pyecharts.charts import Page, Grid
page = Page()
grid = Grid()
grid.add(bar, grid_opts=opts.GridOpts(pos_left="5%"))
grid.add(line, grid_opts=opts.GridOpts(pos_right="5%"))
page.add(grid)
page.render("dashboard.html")