「AI Python 系列」第 02 栏 · AI+数据可视化 全栏 15 篇 · 零成本跟完 🍃 作者:梅雅达编程笔记 首发:CSDN
摘要: Matplotlib 和 Seaborn 画的图是静态的——不能缩放、不能交互。Pyecharts 基于百度 ECharts,天生支持中文,画出来的图表可以在浏览器里交互:鼠标悬停显示数据、缩放查看细节、点击切换系列。本篇从零开始学 Pyecharts:安装配置、柱状图、折线图、饼图、散点图,每种都给出完整可运行代码。
前面学的 matplotlib 和 seaborn 画的图都是静态图片。
但很多场景你需要交互:
- 老板看报表,想鼠标悬停看具体数值
- 数据点多,想缩放看局部细节
- 多个系列,想点击切换显示/隐藏
Pyecharts 就是为了解决这些问题。它基于百度开源的 ECharts,天然支持中文,而且语法非常简单。
一、安装和基本用法
pip install pyecharts
Pyecharts 的核心思想是链式调用:
from pyecharts.charts import Bar
bar = (
Bar()
.add_xaxis(['1月', '2月', '3月', '4月', '5月', '6月'])
.add_yaxis('销售额', [12.3, 10.1, 15.8, 14.2, 18.6, 22.1])
.set_global_opts(title_opts={'title': '月度销售趋势'})
)
bar.render('sales_bar.html') # 生成 HTML 文件
打开 sales_bar.html,你就能在浏览器里看到一个可以交互的柱状图。鼠标悬停会显示具体数值,工具栏里有保存图片、数据视图、切换缩放等功能。

💡 Pyecharts 的图表都是 HTML 文件。render() 生成文件,在 Jupyter 里也可以用 render_notebook() 直接内嵌显示。
二、基础图表
2.1 柱状图
from pyecharts.charts import Bar
from pyecharts import options as opts
products = ['商品A', '商品B', '商品C', '商品D']
sales = [320, 280, 195, 205]
bar = (
Bar()
.add_xaxis(products)
.add_yaxis('销量', sales,
itemstyle_opts=opts.ItemStyleOpts(color='#2196F3'))
.set_global_opts(
title_opts=opts.TitleOpts(title='各商品销量对比'),
tooltip_opts=opts.TooltipOpts(trigger='axis'),
toolbox_opts=opts.ToolboxOpts(is_show=True),
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=True)) # 显示数据标签
)
bar.render('bar_basic.html')

分组柱状图:
bar = (
Bar()
.add_xaxis(['商品A', '商品B', '商品C', '商品D'])
.add_yaxis('线上', [180, 150, 100, 110], category_gap='30%')
.add_yaxis('线下', [100, 90, 65, 70])
.add_yaxis('分销', [40, 40, 30, 25])
.set_global_opts(
title_opts=opts.TitleOpts(title='各商品分渠道销量'),
tooltip_opts=opts.TooltipOpts(trigger='axis'),
)
)
bar.render('bar_group.html')

只需要多次 add_yaxis 就能叠加系列。
2.2 折线图
from pyecharts.charts import Line
months = ['1月', '2月', '3月', '4月', '5月', '6月',
'7月', '8月', '9月', '10月', '11月', '12月']
sales = [12.3, 10.1, 15.8, 14.2, 18.6, 22.1,
19.5, 24.3, 21.7, 26.8, 30.2, 35.5]
line = (
Line()
.add_xaxis(months)
.add_yaxis('销售额', sales,
is_smooth=True, # 平滑曲线
areastyle_opts=opts.AreaStyleOpts(opacity=0.3), # 面积填充
label_opts=opts.LabelOpts(is_show=False),
itemstyle_opts=opts.ItemStyleOpts(color='#2196F3'))
.set_global_opts(
title_opts=opts.TitleOpts(title='全年销售趋势'),
tooltip_opts=opts.TooltipOpts(trigger='axis'),
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=30)),
)
)
line.render('line_smooth.html')

关键参数:
- is_smooth=True:画平滑曲线而不是折线
- areastyle_opts:面积图填充,透明度 0.3
- xaxis_opts 里的 rotate=30:X 轴标签旋转 30° 防止重叠
2.3 饼图
from pyecharts.charts import Pie
data = [('线上', 55), ('线下', 30), ('分销', 15)]
pie = (
Pie()
.add('', data,
radius=['40%', '70%'], # 环形图(留空就是实心饼图)
label_opts=opts.LabelOpts(formatter='{b}: {c} ({d}%)'))
.set_global_opts(
title_opts=opts.TitleOpts(title='销售渠道占比'),
legend_opts=opts.LegendOpts(orient='vertical', pos_left='left'),
)
.set_colors(['#2196F3', '#FF5722', '#4CAF50'])
)
pie.render('pie_donut.html')

radius=['40%', '70%'] 画出来的是环形图。想画实心饼图就去掉这个参数。
formatter='{b}: {c} ({d}%)' 表示显示"名称: 数值 (百分比)"。
2.4 散点图
from pyecharts.charts import Scatter
prices = [59, 79, 99, 129, 159, 199, 249, 299]
volumes = [420, 350, 280, 180, 120, 85, 45, 20]
scatter = (
Scatter()
.add_xaxis(prices)
.add_yaxis('销量', volumes,
symbol_size=15, # 点的大小
itemstyle_opts=opts.ItemStyleOpts(color='#2196F3'))
.set_global_opts(
title_opts=opts.TitleOpts(title='价格 vs 销量'),
xaxis_opts=opts.AxisOpts(name='价格(元)'),
yaxis_opts=opts.AxisOpts(name='销量(件)'),
tooltip_opts=opts.TooltipOpts(formatter='{c[0]}元 → {c[1]}件'),
)
)
scatter.render('scatter.html')

三、Jupyter Notebook 中使用
如果你在用 Jupyter,不需要 render() 生成文件,直接内嵌显示:
from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.globals import RenderType, ThemeType
# 关键:设置渲染类型为 notebook
bar = (
Bar()
.add_xaxis(['A', 'B', 'C'])
.add_yaxis('销量', [10, 20, 30])
.set_global_opts(title_opts=opts.TitleOpts(title='Jupyter 内嵌图'))
)
bar.render_notebook() # 注意是 render_notebook()

这样图表就会直接显示在 Notebook 的输出单元格里。
四、主题和全局配置
Pyecharts 内置了多种主题:
from pyecharts.globals import ThemeType
bar = (
Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK)) # 暗色主题
.add_xaxis(['A', 'B', 'C'])
.add_yaxis('销量', [10, 20, 30])
)
常用主题:LIGHT(默认)、DARK、WHITE、MACARONS(马卡龙色)、ROMA(罗马风)。
常用全局配置
from pyecharts import options as opts
chart = (
Bar()
.add_xaxis(x_data)
.add_yaxis('系列名', y_data)
.set_global_opts(
# 标题
title_opts=opts.TitleOpts(title='主标题', subtitle='副标题'),
# 提示框(鼠标悬停时显示)
tooltip_opts=opts.TooltipOpts(
trigger='axis', # 'item' 或 'axis'
axis_pointer_type='cross' # 十字准线
),
# 工具箱(右上角那些按钮)
toolbox_opts=opts.ToolboxOpts(
is_show=True,
pos_right='5%'
),
# 图例
legend_opts=opts.LegendOpts(
is_show=True,
pos_top='10%',
orient='horizontal'
),
# 数据区域缩放
datazoom_opts=[
opts.DataZoomOpts(type_='slider', range_start=0, range_end=100),
opts.DataZoomOpts(type_='inside'), # 鼠标滚轮缩放
],
# 视觉映射(颜色映射)
visualmap_opts=opts.VisualMapOpts(
is_show=True,
max_=100,
min_=0,
orient='horizontal',
pos_bottom='0%'
),
)
)
五、数据区域缩放:数据多时的救星
当你有 100 个数据点,不可能一次全看清。Pyecharts 的 DataZoom 组件完美解决这个问题:
import random
months = [f'{i}月' for i in range(1, 25)]
sales = [random.randint(10, 50) for _ in range(24)]
line = (
Line()
.add_xaxis(months)
.add_yaxis('销售额', sales, is_smooth=True)
.set_global_opts(
title_opts=opts.TitleOpts(title='24个月销售趋势'),
# 底部滑动条缩放
datazoom_opts=[
opts.DataZoomOpts(type_='slider', range_start=0, range_end=50),
# 鼠标滚轮/触摸缩放
opts.DataZoomOpts(type_='inside'),
],
tooltip_opts=opts.TooltipOpts(trigger='axis'),
)
)
line.render('line_datazoom.html')

生成的图底部会有一个滑块,拖动它就能看到不同时间段的细节。鼠标滚轮也能缩放。 
六、Pyecharts vs Matplotlib 对比
| 输出格式 | 静态图片 (PNG/SVG) | HTML 交互页面 |
| 中文支持 | 需手动配置字体 | 天然支持 |
| 交互性 | 无 | 悬停、缩放、切换 |
| 学习曲线 | API 多,较陡 | 链式调用,简单 |
| 统计图表 | Seaborn 配合 | 不如 Seaborn 丰富 |
| 适合场景 | 论文、报告、打印 | Web 展示、仪表盘 |
不是替代关系,是互补关系。 需要好看的静态图 → matplotlib/seaborn;需要交互展示 → pyecharts。
七、小结
Pyecharts 的核心优势就三个字:交互式。
关键 API 速查:
| 柱状图 | Bar() | add_xaxis() + add_yaxis() |
| 折线图 | Line() | is_smooth=True 平滑曲线 |
| 饼图 | Pie() | radius 控制环形/实心 |
| 散点图 | Scatter() | symbol_size 控制点大小 |
| 通用 | .set_global_opts() | 标题/提示框/工具箱/缩放 |
| 通用 | .set_series_opts() | 数据标签/样式 |
记住两件事:
下一篇讲 Pyecharts 的进阶功能——地图、时间线、组合图表。
下期预告: Day 09 Pyecharts 进阶——用 Pyecharts 画中国地图、时间轮播图、多图表组合仪表盘。
往期回顾
Day 01 · 数据可视化到底在干啥?为什么 AI 让它变简单了
Day 02:环境搭建 Python 数据分析零成本工具包
Day 03 · Pandas 快速上手:读取、清洗、整理数据 文章已被快递鸟社区收录
Day 04 · 数据清洗:缺失值、异常值、重复值一站式处理
Day 05 · Matplotlib 基础:折线图、柱状图、饼图、散点图
Day 06 · 图表美化:配色、标注、子图布局、中文显示
Day 07 · Seaborn 进阶:统计图表一行代码搞定
专栏
-「AI Python 系列」第 02 栏 ·AI+数据可视化(连载中) -「AI Python 系列」第 01 栏 · AI+自动化办公(连载中) -「AI Python 系列」第 03 栏 · Python 爬虫实战(连载中)
资源领取
- 关注作者获取本栏完整代码和数据集
原创声明:本文为梅雅达编程笔记原创作品,未经允许不得转载。


