Day 08 · Pyecharts 入门:可交互的中文图表
2026/8/5 15:36:45 网站建设 项目流程

「AI Python 系列」第 02 栏 · AI+数据可视化
全栏 15 篇 · 零成本跟完 🍃
作者:梅雅达编程笔记
首发:CSDN


摘要:MatplotlibSeaborn画的图是静态的——不能缩放、不能交互。Pyecharts基于百度ECharts,天生支持中文,画出来的图表可以在浏览器里交互:鼠标悬停显示数据、缩放查看细节、点击切换系列。本篇从零开始学Pyecharts:安装配置、柱状图、折线图、饼图、散点图,每种都给出完整可运行代码。


前面学的matplotlibseaborn画的图都是静态图片。

但很多场景你需要交互:

  • 老板看报表,想鼠标悬停看具体数值
  • 数据点多,想缩放看局部细节
  • 多个系列,想点击切换显示/隐藏

Pyecharts就是为了解决这些问题。它基于百度开源的ECharts天然支持中文,而且语法非常简单。


一、安装和基本用法

pipinstallpyecharts

Pyecharts的核心思想是链式调用

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.3
  • xaxis_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(默认)、DARKWHITEMACARONS(马卡龙色)、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对比

特性MatplotlibPyecharts
输出格式静态图片 (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()数据标签/样式

记住两件事:

  1. 链式调用.add_xaxis().add_yaxis().set_global_opts().render()
  2. Jupyterrender_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 爬虫实战(连载中)

资源领取

  • 关注作者获取本栏完整代码和数据集

原创声明:本文为梅雅达编程笔记原创作品,未经允许不得转载。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询