「AI Python 系列」第 02 栏 · AI+数据可视化
全栏 15 篇 · 零成本跟完 🍃
作者:梅雅达编程笔记
首发:CSDN
摘要:
Matplotlib和Seaborn画的图是静态的——不能缩放、不能交互。Pyecharts基于百度ECharts,天生支持中文,画出来的图表可以在浏览器里交互:鼠标悬停显示数据、缩放查看细节、点击切换系列。本篇从零开始学Pyecharts:安装配置、柱状图、折线图、饼图、散点图,每种都给出完整可运行代码。
前面学的matplotlib和seaborn画的图都是静态图片。
但很多场景你需要交互:
- 老板看报表,想鼠标悬停看具体数值
- 数据点多,想缩放看局部细节
- 多个系列,想点击切换显示/隐藏
Pyecharts就是为了解决这些问题。它基于百度开源的ECharts,天然支持中文,而且语法非常简单。
一、安装和基本用法
pipinstallpyechartsPyecharts的核心思想是链式调用:
frompyecharts.chartsimportBar 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 柱状图
frompyecharts.chartsimportBarfrompyechartsimportoptionsasopts 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 折线图
frompyecharts.chartsimportLine 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.3xaxis_opts里的rotate=30:X 轴标签旋转 30° 防止重叠
2.3 饼图
frompyecharts.chartsimportPie 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 散点图
frompyecharts.chartsimportScatter 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()生成文件,直接内嵌显示:
frompyecharts.chartsimportBarfrompyechartsimportoptionsasoptsfrompyecharts.globalsimportRenderType,ThemeType# 关键:设置渲染类型为 notebookbar=(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内置了多种主题:
frompyecharts.globalsimportThemeType bar=(Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK))# 暗色主题.add_xaxis(['A','B','C']).add_yaxis('销量',[10,20,30]))常用主题:LIGHT(默认)、DARK、WHITE、MACARONS(马卡龙色)、ROMA(罗马风)。
常用全局配置
frompyechartsimportoptionsasopts 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组件完美解决这个问题:
importrandom months=[f'{i}月'foriinrange(1,25)]sales=[random.randint(10,50)for_inrange(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')生成的图底部会有一个滑块,拖动它就能看到不同时间段的细节。鼠标滚轮也能缩放。
六、PyechartsvsMatplotlib对比
| 特性 | Matplotlib | Pyecharts |
|---|---|---|
| 输出格式 | 静态图片 (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() | 数据标签/样式 |
记住两件事:
- 链式调用:
.add_xaxis().add_yaxis().set_global_opts().render() Jupyter用render_notebook(),独立脚本用render()
下一篇讲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 爬虫实战(连载中)
资源领取
- 关注作者获取本栏完整代码和数据集
原创声明:本文为梅雅达编程笔记原创作品,未经允许不得转载。