数据可视化:matplotlib/pyecharts
本教程共 70 篇 · 第 67 篇 · 更新于 2026-07-22 · 约 5 分钟阅读
67. 数据可视化:matplotlib/pyecharts
本节目标:学会用 matplotlib 画基础统计图表,用 pyecharts 生成交互式网页图表,让数据会说话。
数据表格密密麻麻,人眼很难抓住重点。把数据转成图表,趋势、对比、分布立刻一目了然。Python 的可视化生态极其丰富,这节介绍两个最常用的库:matplotlib 和 pyecharts。
matplotlib:绘图基石
matplotlib 是 Python 最老牌、最通用的绘图库,几乎成了数据可视化的行业标准。它的 API 设计参照 MATLAB,功能强大但略显繁琐。
安装:
pip install matplotlib
折线图
import matplotlib.pyplot as plt
months = ['1月', '2月', '3月', '4月', '5月', '6月']
sales = [120, 150, 180, 170, 210, 240]
plt.figure(figsize=(8, 4))
plt.plot(months, sales, marker='o', linestyle='-', color='b', label='销售额')
plt.title('上半年销售趋势')
plt.xlabel('月份')
plt.ylabel('万元')
plt.legend()
plt.grid(True)
plt.savefig('sales.png', dpi=150)
plt.show()
plt.plot() 是最核心的函数,marker 设置数据点样式,linestyle 设置线型,color 设置颜色。plt.savefig() 把图存成文件,plt.show() 弹窗显示。
柱状图和水平条形图
categories = ['产品A', '产品B', '产品C', '产品D']
values = [320, 450, 280, 390]
plt.figure(figsize=(6, 4))
plt.bar(categories, values, color=['coral', 'skyblue', 'lightgreen', 'gold'])
plt.title('各产品销量对比')
plt.ylabel('件')
for i, v in enumerate(values):
plt.text(i, v + 10, str(v), ha='center')
plt.show()
水平条形图把 plt.bar() 换成 plt.barh(),适合类别名称较长的情况。
散点图和直方图
import numpy as np
# 散点图
x = np.random.rand(50)
y = np.random.rand(50)
colors = np.random.rand(50)
sizes = 1000 * np.random.rand(50)
plt.scatter(x, y, c=colors, s=sizes, alpha=0.5)
plt.title('随机散点')
plt.show()
# 直方图
data = np.random.randn(1000)
plt.hist(data, bins=30, edgecolor='black')
plt.title('数据分布')
plt.show()
组合子图
fig, axes = plt.subplots(1, 2, figsize=(10, 4))
axes[0].plot(months, sales, marker='o')
axes[0].set_title('折线图')
axes[1].bar(categories, values)
axes[1].set_title('柱状图')
plt.tight_layout()
plt.show()
subplots() 一次性创建多个子图,axes 是一个数组,每个元素对应一个坐标轴。
Tipmatplotlib 默认不支持中文,标题可能显示成方框。在代码开头加上:
plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei'] plt.rcParams['axes.unicode_minus'] = False
pyecharts:交互式网页图表
matplotlib 生成的图是静态图片,适合放在报告里。如果你需要在网页上展示可交互的图表(鼠标悬停显示数值、缩放、切换数据系列),pyecharts 是绝佳选择。
它基于百度开源的 ECharts,用 Python 语法配置,最终生成 HTML + JavaScript。
安装:
pip install pyecharts
基础用法
from pyecharts.charts import Bar
from pyecharts import options as opts
bar = Bar()
bar.add_xaxis(['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子'])
bar.add_yaxis('商家A', [5, 20, 36, 10, 75, 90])
bar.add_yaxis('商家B', [15, 25, 16, 55, 48, 8])
bar.set_global_opts(title_opts=opts.TitleOpts(title='商品销量'))
bar.render('bar_chart.html')
运行后生成一个 HTML 文件,用浏览器打开就能看到带交互效果的柱状图。
链式调用风格
pyecharts 也支持更紧凑的链式写法:
from pyecharts.charts import Line
from pyecharts import options as opts
line = (
Line()
.add_xaxis(['周一', '周二', '周三', '周四', '周五'])
.add_yaxis('最高气温', [22, 24, 28, 26, 30])
.add_yaxis('最低气温', [12, 14, 16, 15, 18])
.set_global_opts(
title_opts=opts.TitleOpts(title='一周气温变化'),
tooltip_opts=opts.TooltipOpts(trigger='axis')
)
)
line.render('line_chart.html')
常用图表类型
from pyecharts.charts import Pie, Map
# 饼图
pie = (
Pie()
.add('', [('苹果', 30), ('香蕉', 25), ('橙子', 20), ('葡萄', 15), ('其他', 10)])
.set_global_opts(title_opts=opts.TitleOpts(title='水果销量占比'))
)
pie.render('pie_chart.html')
Notepyecharts 默认从 CDN 加载 ECharts 的 JavaScript 文件。如果要在离线环境使用,需要配置
pyecharts.globals.CurrentConfig.ONLINE_HOST指向本地资源。
matplotlib vs pyecharts 怎么选
| 维度 | matplotlib | pyecharts |
|---|---|---|
| 输出格式 | 静态图片(PNG/PDF/SVG) | 交互式 HTML |
| 适用场景 | 论文、报告、数据探索 | 网页、大屏、数据看板 |
| 学习曲线 | 中等,API 较底层 | 简单,配置化 |
| 自定义程度 | 极高,可控制每个像素 | 中等,依赖 ECharts 内置能力 |
日常分析用 matplotlib 快速出图,需要做演示或网页展示时切到 pyecharts。
小结
- matplotlib 是 Python 可视化的基础,
plot、bar、scatter、hist覆盖大部分需求。 subplots()组合多个图表,rcParams解决中文显示问题。- pyecharts 生成交互式 HTML 图表,链式调用简洁优雅。
- 选库看场景:静态报告用 matplotlib,网页交互用 pyecharts。
来源:参考了 runoob「Python pyecharts」、liaoxuefeng「17.1. Pillow」等,改写后所得。