把图放进报告、邮件或 Word 文档,优先考虑 Matplotlib 输出 PNG/PDF;需要接收者在浏览器悬停查看数值或缩放探索,优先考虑 Plotly 输出 HTML。先决定别人怎样使用结果,再选择工具,比按“哪款更强”选更有效。
Matplotlib 和 Plotly 是绘图库,本身不等于生成式 AI;本文用于检查和交付 AI 数据处理结果,没有调用模型自动生成分析结论。下面用训练样本的人工复核数量,比较两种具体交付方式。

用同一组维度比较
| 要决定什么 | Matplotlib 的 PNG/PDF 路径 | Plotly 的 HTML 路径 |
|---|---|---|
| 接收者怎样查看 | 用普通图片/PDF 阅读器查看固定图面 | 用浏览器查看交互图,适合悬停与缩放 |
| 报告是否需要固定版式 | 容易按页面尺寸、dpi、字体设置输出 | 需确认容器尺寸、浏览器和交互行为 |
| 离线分享 | 静态文件不需要运行 Python | 内嵌 Plotly.js 时可独立分享,文件会更大 |
| 可追溯性 | 另附汇总表、统计口径和样本数量 | 同样要附统计口径;图中悬停不替代原始核对 |
| 后续想导出 PNG | 使用 savefig,格式受后端影响 | 需另外准备静态导出依赖,不能只凭 HTML 成功判断 |
这里比较的是这两种交付路径;Matplotlib 也有交互后端,Plotly 也能导出静态图,不能把工具简单划成“只能静态”和“只能交互”。这张表也不比较渲染速度:本文没有做大数据量的性能基准。
同一输入生成两份结果
两份图使用完全相同的三组数量:verified 120、pending 80、rejected 100,总计 300 条演示样本。三项状态互斥,表示人工给定的复核状态;它们不是模型准确率或真实客户统计。
示例已在 Windows、Python 3.11.15、Matplotlib 3.10.7、Plotly 7.1.0 运行。
在空的练习目录里创建独立环境。以下为 Windows PowerShell 命令;macOS/Linux 的激活命令用 source .venv/bin/activate。输出文件只用于本次演示,重复执行会更新这些演示文件。
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install matplotlib==3.10.7 plotly==7.1.0
将下面代码保存为 visualization_choice.py,执行 python visualization_choice.py。输出在 choice_output 目录。
from pathlib import Path
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import plotly.graph_objects as go
status = ['verified', 'pending', 'rejected']
counts = [120, 80, 100]
out = Path('choice_output')
out.mkdir(exist_ok=True)
fig, ax = plt.subplots(figsize=(6, 4))
bars = ax.bar(status, counts)
ax.set(xlabel='Review status', ylabel='Samples', ylim=(0, 140))
ax.set_title('Synthetic AI sample review')
fig.tight_layout()
fig.savefig(out / 'review.png', dpi=150)
assert [bar.get_height() for bar in bars] == counts
plt.close(fig)
interactive = go.Figure(go.Bar(x=status, y=counts))
interactive.update_layout(
title='Synthetic AI sample review',
xaxis_title='Review status', yaxis_title='Samples',
yaxis_range=[0, 140],
)
interactive.write_html(out / 'review.html', include_plotlyjs=True, full_html=True)
assert list(interactive.data[0].y) == counts
assert len(interactive.data[0].x) == 3
print('categories:', len(status), 'samples:', sum(counts))
print('heights:', counts)
print('outputs:', 'choice_output/review.png', 'choice_output/review.html')
先核对图,再交给别人
categories: 3 samples: 300
heights: [120, 80, 100]
outputs: choice_output/review.png choice_output/review.html
打开 review.png,应有三根从零开始的柱子,高度依次为 120、80、100,纵轴标为 Samples。再用浏览器打开 review.html,把鼠标移到各柱子上核对数值,并缩放后恢复全图。PNG 的三项相加和 HTML 中的三项相加都必须是 300;如果不一致,先检查筛选条件和汇总表。
代码使用 include_plotlyjs=True 将交互库内嵌进 HTML。若改成 CDN 引用,文件可变小,但查看时依赖网络与外部脚本可用性;没有网络的接收环境应保留内嵌方式。HTML 会携带用于作图的数据,隐藏图例或改标题不会删除这些数据。
按实际情境作选择
给老师、同事或客户发送固定结果:用 PNG/PDF,并附样本统计表与口径。需要反复探索类别和局部数据:用 HTML,先在对方允许的浏览器环境验证。如果团队既要探索又要存档,可以保留交互 HTML,再单独导出经过核对的静态图。
如果最后只需要 PNG,Plotly 的 HTML 导出成功不代表静态导出也已具备依赖。官方静态导出说明涉及 Kaleido;Kaleido 1.0.0 起还需要机器上可用的 Chrome/Chromium。先按官方说明准备依赖,再运行静态导出,不把缺失依赖误判成数据错误。
数据由人为构造。本地已验证脚本、PNG 图面和 Plotly 图对象的数值,没有执行浏览器悬停操作,也没有验证 Plotly 静态导出。换成真实训练数据时,先确认复核状态是否互斥、是否存在一条样本多次登记,再画图。
如果你的起点是模型给出的 CSV 绘图代码,可先参考读取 CSV 并导出 PNG 的完整步骤,再按本题决定怎样交付。
官方资料与版本范围
本文于 2026 年 10 月 1 日读取下列官方文档;示例的实际版本见正文。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/32532.html