研究报告 · 约 27,295 字 · 预计推送 3 部分

数据可视化个人工具链:Matplotlib、Plotly 与 Mermaid 选型(横纵综合报告) 未开始

目录

题记与说明

时间截面:2026-11-06
综合自:纵轴章《数据可视化个人工具链:Matplotlib、Plotly 与 Mermaid 选型——纵轴发展史》与横轴章《——横轴对比报告》(均在本课题 parts 目录)。两章的重复叙述已合并,口径分歧已用本会话的注册表复核结果调和,调和记录见文末附录。
核验声明:横轴章的版本号、星数、许可证为撰写会话内经 PyPI / npm / GitHub API 实查所得;本综合稿在 2026-11-06 当日对两章有分歧或置信度存疑的日期做了第二轮复核(curl + PyPI/npm/GitHub API,命令与结果见文末"核验记录"),并据此修正了纵轴章两处时间线误记(Mermaid v12 发布时间、Dash 4.5.0 时间)。凡属检索摘要、未经直接核验的条目,文中均如实标注。修订稿(本文件)另按独立审读意见,于同日修订会话内补核了 pyecharts 星数、Mermaid 的 npm latest 口径、mermaid-cli 与 mermaid 核心库的依赖对应、plotly.js 4.0.0 本体发布时间与 plotly.py 7.1.0 的 kaleido 依赖约束(核验记录第 7–9 条)。
本课题倾向:静态报告优先。

TL;DR

三件套不是三选一,而是工具链的三个正交层位:Matplotlib 管出版级静态数据图,Plotly 管交互式 Web 数据图,Mermaid 管 Markdown 结构图。选型问题纵轴上被四次改写:MATLAB 搬家→静态还是交互→图进版本控制→人写还是 AI 写。当下三者均活跃维护、许可全宽松,各自是其赛道的事实标准或头部玩家。静态报告优先的推荐组合:Matplotlib+Seaborn 出版输出、Plotly+Kaleido 交互兼静态兜底、Mermaid+mermaid-cli 结构图。最大共性短板:Plotly 与 Mermaid 的静态导出依赖 Chromium,Matplotlib 是唯一天然的出版级出口。


一、纵轴:发展脉络(2003 → 2026-11-06)

1.0 前提:三条并行又交汇的工具线

本课题的"个人工具链"由三个定位互补的库构成:Matplotlib 是 Python 生态的静态绘图基石,面向出版级图形、论文与报告插图;Plotly(plotly.py / plotly.js / Dash)面向交互式 Web 图形与数据应用;Mermaid 是"图表即代码"(diagram-as-code)的结构图渲染器,服务于 Markdown 文档。三条线不是一条直线:Matplotlib 与 Plotly 争夺"数据图"这一层(静态 vs 交互),Mermaid 则开辟了"结构图"这一层(画数据 vs 画结构)。二十多年的选型话语,随三条线的能力扩张而不断被改写。

1.1 前史(1990s–2002):MATLAB 的一统与 Python 的空白

在 Python 可视化成熟之前,科研圈的数据绘图事实上被 MATLAB 垄断。John D. Hunter(1968–2012)本是一位神经生物学家,长期用 MATLAB 分析 EEG 数据;当分析应用复杂到需要操作数据库、HTTP 服务时,MATLAB 作为编程语言的短板暴露,他决定整体迁往 Python——却发现"找不到一个合适的 2D 绘图包"。他在官方历史文档(2008 年写成,至今仍挂在 matplotlib.org)里写道:找不到就自己写,"像任何一个自重的 Python 程序员会做的那样"(Matplotlib 官方历史)。

同一时期,结构图的缺位由 AT&T 的 Graphviz(dot 语言传统)等工具填补——"用文本描述图、由程序渲染"的范式早已有之,这为后来 Mermaid 的出现提供了概念母版。

1.2 阶段一(2003–2011):Matplotlib 单极时代

关键节点:2002–2003 年,Hunter 把 Matplotlib 作为 IPython 的一个补丁起步,目标是让 Python 具备 MATLAB 式绘图;2003 年发布 0.1 并开源(Wikipedia: Matplotlib)。2007 年,Hunter 发表论文 *Matplotlib: A 2D Graphics Environment*(Computing in Science & Engineering),成为日后几乎所有科学出版物的标准引用。2010 年 7 月 1.0 发布,标志库进入成熟期;此时它已绑定 NumPy/SciPy 生态,后来又成为 pandas .plot() 的默认后端。

形态的由来:"出版级质量 + 可嵌入 GUI + 代码可扩展 + MATLAB 式语法"这四个来自 Hunter 本人的需求,定义了库的形态——pylab 接口模仿 MATLAB,Agg/PS/SVG/PDF 等后端负责渲染(官方历史)。

选型话语:这一阶段所谓"选型",实质是"要不要从 MATLAB 搬家"。Matplotlib 的答案是:语法上让你无痛搬家。

1.3 阶段二(2012–2016):三线并起——创始人离世、商业公司入场、文本绘图萌芽

驱动因素:Jupyter Notebook(2014–2015 年由 IPython 演化而来)把"代码 + 图 + 文字"装进同一个画布,交互图的价值被放大;d3.js(2011)引爆的 Web 可视化浪潮让"图应该能在浏览器里转起来"成为新预期。

选型话语:从"用哪个静态库"变成"静态还是交互"。Plotly 早期要求图表上传云端账户,让不少个人用户敬而远之——这个痛点要到 2019 年才被解决。

1.4 阶段三(2017–2019):现代化改造与 "Express First"

选型话语:2019 年是本课题的关键转折——plotly.py 4.0 之后,"matplotlib 快而糙、plotly 好看但要传云"的旧刻板印象同时被两边削弱,两者的对比开始回归本质:静态出版流程选 Matplotlib,探索交互选 Plotly。

1.5 阶段四(2020–2022):文档即代码与 GitHub 转折点

驱动因素:疫情期远程协作把文档推向"文档即代码"(docs-as-code)主流;架构图必须能 diff、能评审、能随 PR 演进,二进制画图文件(Visio/draw.io 源文件)跟不上这套工作流。

选型话语:"结构图怎么画"的默认答案在 2022 年被改写为:能写 Mermaid 就写 Mermaid。三条工具线的分工自此清晰化——Mermaid 管结构图,Matplotlib/Plotly 管数据图。

1.6 阶段五(2023–2024):AI 前夜、破坏性重构与商业化

驱动因素:LLM 的兴起是本阶段最深的暗流。大模型生成文本天然适合生成 Mermaid 的标记语言(简短、声明式、容错),GitHub 上的原生渲染又给了这些文本即开即用的出口;而 Matplotlib/Plotly 代码则成为 AI 编程助手"现场出图"的标准产物。"文本进、图出"的三件套在此完成了一次意外的价值重估。

1.7 阶段六(2025 → 2026-11-06):当前截面——解绑 pandas、字体大修、Mermaid v12 换血

本阶段的日期均经本会话注册表复核(PyPI 上架时间 / GitHub Releases 发布时间),修正了纵轴章原有的两处摘要口径误差,详见文末核验记录。

驱动因素:DataFrame 生态多元化(Polars 冲击 pandas 默认地位)迫使绘图库做中间层抽象;前端工具链现代化(ESM、新运行时门槛)倒逼两个 JS 系项目(plotly.js、Mermaid)交替进行破坏性升级;AI Agent 与数据应用融合成为 Plotly 的商业化叙事。

1.8 纵轴收束:选型问题的四次改写

把三条线叠在同一条时间轴上,"选型"问题的提法经历了四次改写:

  1. 2003–2011:"要不要从 MATLAB 搬到 Python?"——Matplotlib 用兼容语法回答了它;
  2. 2012–2019:"静态还是交互?"——plotly.js 开源 + 4.0 离线化 + Express 并入,让交互路线第一次在个人工具链里"零摩擦";
  3. 2020–2022:"图能不能进文档的版本控制?"——GitHub 2022-02-14 原生支持 Mermaid 后,结构图全面转入 text-first;
  4. 2023 至今:"人写还是 AI 写?"——Mermaid 成为 LLM 输出结构图的事实标准,Matplotlib/Plotly 代码则由 AI 现场生成,选型重心从"学哪个语法"转向"哪条产线的下游渲染最可靠"。

关键版本速查表(标 \* 的日期经 PyPI / GitHub API 复核;其中 Mermaid 12.3.0 的 npm latest 口径另经修订会话 npm registry 复核,见核验记录第 7 条):

时间事件意义
2003Matplotlib 0.1 开源Python 静态绘图起点
2007Hunter 论文发表科学出版标准引用
2010-07Matplotlib 1.0成熟化
2012-08Hunter 去世;Plotly 公司成立社区治理制度化 / 商业力量入场
2014Mermaid 初版结构图 text-first 范式
2015plotly.js 开源交互图底座成型
2016Vega-Lite 1.0 / Altair声明式范式(竞品参照系)
2017-01Matplotlib 2.0默认样式现代化
2017Dash 发布图 → 数据应用
2019-07plotly.py 4.0Express First + 全离线
2021-06plotly.js 2.0 / plotly.py 5.0交互线大版本清扫
2022-02-14GitHub 原生 MermaidMermaid 爆发的转折点
2023-03Mermaid v10(ESM-only)第一次破坏性现代化
2024-05 / 2024-12Matplotlib 3.9 / 3.10NASA 资助、无障碍推进
2024-08-23Mermaid v11新图类型
2025-02plotly.js 3.0 / plotly.py 6.0 / Dash 3.0Narwhals 解绑 pandas
2026-03-09Mermaid 11.13.0 \*11.x 收官打磨
2026-06-11Matplotlib 3.11(字体大修)出版级质量再加固
2026-08-25plotly.py 7.0(内置 plotly.js 4.0)\*交互线再大版本
2026-09-10Mermaid v12.0(ELK 默认布局)\*第二次破坏性现代化
2026-11-03Mermaid 12.3.0 \*(npm latest)当前版本

局限说明:Mermaid Chart 融资金额、Mermaid 用户数、Plotly 的 Databricks 合作与 2026 年产品动作来自检索结果摘要,未能逐一打开原文核对,已在文中标注;纵轴章原记"Mermaid v12 于 2025 下半年发布"经本会话 GitHub Releases 核验修正为 2026-09-10;纵轴章原记"Dash 最新 4.5.0(2026-07)"修正为 release 发布于 2026-10-29。


二、横轴:横向对比(2026-11-06 时间截面)

2.1 对比方法与竞品地图

课题本质不是"三选一",而是三个互补层位的组合,因此横轴采取"分赛道对比 + 统一维度":为 Matplotlib 找同赛道竞品(Seaborn、Bokeh、Altair、ECharts/pyecharts、D3.js),为 Plotly 找同赛道竞品(Bokeh、Altair、ECharts/pyecharts、D3.js),为 Mermaid 找同赛道竞品(PlantUML、D2、Graphviz);统一用五个维度横切:能力、成本、生态、成熟度、适用场景。

数据图表(数值驱动)
├── 静态/出版向:Matplotlib(+Seaborn)、Gnuplot、TikZ(PGF)
├── 交互/Web 向:Plotly、Bokeh、Altair(Vega-Lite)、ECharts(pyecharts)、D3.js、Observable Plot
└── 语法桥接层:pandas.DataFrame.plot(底层即 Matplotlib)

示意图/结构图(文本驱动,Diagram-as-Code)
├── Mermaid:Markdown 生态默认,GitHub/GitLab/Notion/Obsidian 原生渲染
├── PlantUML:UML 全家桶老将,表达力最强,Java 依赖
├── D2:新一代声明式,主打美观与布局引擎(ELK/TALA),MPL-2.0
└── Graphviz(DOT):40+ 年历史的自动布局基石,低层语法

范围说明:这张地图刻意画得比下文的对比范围宽——Gnuplot、TikZ(PGF)、Observable Plot 属于全景参照系(分别代表传统静态出版与 Web 原生可视化的一席),但不进入 2.3–2.6 的逐项对比、短评与场景速查;下文只对"个人工具链"决策真正有影响的条目做逐项比较。

2.2 三主角画像(星数与推送时间经本会话 GitHub API 复核,数值与横轴章一致)

工具当前版本(核验来源)许可证GitHub 星数最近推送
Matplotlib3.11.2(PyPI)PSF 基础的 BSD 兼容许可证23,4272026-11-05
Plotly(plotly.py / plotly.js)7.1.0(PyPI)/ plotly.js 4.xMIT18,376(plotly.js 仓库)2026-10-29
Mermaid12.3.0(npm latest,修订会话经 npm registry 复核,见核验记录第 7 条);mermaid-cli 12.2.0(npm)MIT91,0202026-11-05

核验方式:curl https://pypi.org/pypi/<pkg>/json、curl https://registry.npmjs.org/<pkg>/latest、curl https://api.github.com/repos/<org>/<repo>(本会话内执行,见文末核验记录)。

mermaid-cli 与 mermaid 核心库的版本对应(回应"锁定 CLI 是否等于锁定渲染行为"):mermaid-cli 12.2.0 在 npm 上声明的核心依赖是 mermaid@^12.2.0(修订会话经 registry.npmjs.org/@mermaid-js/mermaid-cli/12.2.0 实查,见核验记录第 7 条)。按 semver 语义,^12.2.0 允许 12.3.0 进入——也就是说,不带锁文件地安装 CLI 12.2.0,实际会拉到当前最新的 mermaid 12.3.0;"锁 CLI"只锁住了 CLI 自身的代码,渲染行为仍随核心库漂移。要真正锁定渲染行为,需用 package-lock.json 等锁文件把 mermaid 的解析版本一并钉死(落地做法见第三节末"最小可用配置")。

2.3 总对比表

总对比表按赛道拆成两张子表(原单表 11 列过宽,不利阅读)。

(一)数据图赛道

维度MatplotlibPlotlySeabornAltairBokehECharts/pyechartsD3.js
定位出版级静态绘图交互式 Web 图表统计图形语法增强声明式 Grammar of Graphics浏览器端大数据交互中文社区活跃的交互图表Web 可视化底层库
渲染形态PNG/PDF/SVG/PGFHTML/Canvas/WebGL同 MatplotlibHTML(Vega-Lite)HTML/CanvasHTML(Canvas/SVG)SVG/Canvas/WebGL
交互性无(静态)强(缩放/悬浮/框选)无强强强自定义极强
静态导出原生最强需 Kaleido(1.5.0,MIT)原生需 vl-convert弱需截图/后端渲染需截图
依赖体量numpy+pillow,纯 Python 栈numpy + kaleido(Chromium)依赖 matplotlib依赖 vega 渲染栈依赖 Node/Web 栈依赖 Node/Web 栈浏览器即可
许可证PSF/BSD 兼容MITBSD-3BSD-3BSD-3Apache-2.0ISC
GitHub 星数\*23,42718,37614,10010,51120,46867,683113,875
学习曲线中陡(API 面大)中(Plotly Express 平缓)低低-中(声明式思维)中低-中高
典型场景论文/报告/出版仪表盘/探索/3D快速统计图快速交互原型流式大数据应用商业报表大屏定制可视化产品

(二)结构图赛道(Diagram-as-Code)

维度MermaidPlantUMLD2Graphviz
定位文本渲染示意图UML/时序全家桶现代声明式示意图通用自动布局
渲染形态SVG(浏览器/CLI)PNG/SVG(Java)SVG/PNGSVG/PNG
交互性轻交互(点击折叠等)弱弱弱
静态导出需 mermaid-cli原生原生 CLI原生 CLI
依赖体量npm 包或 mermaid-cli(Chromium)Java单二进制/CLI单二进制
许可证MITLGPL-3.0MPL-2.0EPL/Apache
GitHub 星数\*91,02013,40125,798~13,000+
学习曲线低(MD 风格)中(UML 知识)低-中中
典型场景README/文档/笔记软件工程建模现代架构图依赖图/网络图

\* 星数口径分层说明:三主角(Matplotlib、plotly.js、Mermaid)为 2026-11-06 综合会话经 GitHub API 复核,数值与横轴章一致(见核验记录第 4 条);pyecharts 的 15,781 为修订会话补核(见核验记录第 7 条);其余竞品(Seaborn、Altair、Bokeh、D3.js、PlantUML、D2)沿用横轴章撰写会话的 GitHub API 实查值,本综合稿未逐一复核;Graphviz 未逐一核验仓库,不作为结论依据。

2.4 逐维度对比

能力。Matplotlib 是 Python 生态里可控性最高的绘图库:从折线柱状到 3D、等高线、矢量场全都能画,且可以通过 rcParams、style、pgf/LaTeX 后端把一张图打磨到出版社排版要求。它的哲学是"每个像素都听你的",代价是常用 API 冗长、figure/axes/artist 多对象模型需要学习;3.11 系列刚完成文本渲染管线大改(What's new 3.11.0),说明它仍在活跃迭代底层能力。Plotly 的强项是交互与 3D:缩放、悬浮提示、图例开关、子图联动开箱即用,WebGL 支撑散点图大数据量渲染,且提供 Dash 框架把图表升级为 Web 应用——有评测认为"Plotly 的 3D 与交互是 Python 生态里做得最好的"(Beyond Matplotlib and Seaborn);另一篇面向科学绘图的对比也把 Plotly 的 3D 能力评为 "Native & Powerful",而 Bokeh 仅为 "Very Limited"(ajmani.dev)。弱项是静态出版质量:Kaleido(MIT,当前 1.5.0)可导出 PNG/SVG/PDF(官方文档),但字体微调与出版级排版控制仍不如 Matplotlib,且 Kaleido v1 重构后 API 有过不兼容变化(6.1 变更说明)。Mermaid 的能力边界与另外两者不在一个量纲——它不画数据图,而是把文本渲染成流程图、时序图、甘特图、ER 图、状态图等 20+ 种结构示意图(官方文档);独特能力是"嵌在 Markdown 里自动渲染":GitHub、GitLab、Notion、Obsidian 均原生支持 `mermaid 代码块,无需任何插件(GitHub 官方文档;2026 平台支持盘点);限制是复杂布局控制弱于专门工具,图大了容易乱。同赛道看:Seaborn(0.13.2)是 Matplotlib 的统计图形高层封装,脱不开 Matplotlib 天花板;Altair(6.3.0)走 Vega-Lite 声明式路线,几十行代码得到带交互的图;Bokeh(3.10.2)主打大数据量与流式更新,多篇评测认为其在大数据/流式上强于 Plotly——pauliacomi 之外,ajmani.dev 也把百万点级大数据场景评给 Bokeh("Excellent (via Server)",Plotly 仅 "Moderate (WebGL required)")(Plotly vs. Bokeh;ajmani.dev),但 Bokeh 生态与上手面更窄;ECharts(6.1.0,Apache-2.0,67,683 星)是商业图表能力最全的开源库之一,pyecharts(2.1.0)是其 Python 封装;D3.js 是 Web 可视化的"汇编语言",上限最高、成本也最高。

成本。许可成本:三者全部宽松许可——Matplotlib 为基于 PSF 的 BSD 兼容许可证(官方许可页),且绘出的图不受许可约束(官方论坛确认);plotly.py 与 Kaleido 均 MIT(社区确认、PyPI);Mermaid MIT。Plotly 公司的商业产品线(Dash Enterprise、Plotly Studio)是另一回事,不影响开源库本身。学习成本:Mermaid < Seaborn/Altair < Plotly Express < Matplotlib < D3,Matplotlib 是三主角中最高的。运行依赖成本:Matplotlib 最轻(pip 即装);Plotly 若要静态导出需 Kaleido 拉起 Chromium,这是"静态报告优先"视角下最需权衡的成本点;Mermaid 的官方静态导出工具 mermaid-cli(12.2.0)同样依赖 Puppeteer/Chromium;PlantUML 需要 Java 运行时,在个人工具链里是额外负担(2026 图表即代码对比)。

生态。Matplotlib 是整个 Python 数据栈的地基——pandas 的 .plot()、Seaborn、xarray、scikit-learn 内置可视化全部构建于其上;有评测据此认为它的兼容性是 Python 绘图库里最好的(Reflex Top 10(2026))。Plotly 的生态重心在"交互交付链"——Plotly Express 语法糖、Dash 应用框架、Kaleido 静态导出,2026 年还推出 AI 辅助的 Plotly Studio(官方 changelog)。Mermaid 的生态重心在"文档平台渗透率"——GitHub/GitLab/Notion/Obsidian/VS Code/Confluence 原生或插件支持(集成指南),91,020 星的量级远超两个 Python 竞品,反映它已成长为 Markdown 世界的"示意图事实标准"。横向观察:星数维度上 D3(113,875)与 ECharts(67,683)的全球影响力大于 plotly.js(18,376),但它们不提供 Python 原生 API 或远不够顺手;pyecharts(15,781 星,修订会话经 GitHub API 复核,见核验记录第 7 条)在中文社区的活跃度值得作为 Plotly 的备选记入工具链。

成熟度。三主角均为 10 年以上项目且在 2026-11-06 截面当日仍在高频提交(matplotlib 与 mermaid 最近推送 2026-11-05,plotly.js 为 2026-10-29,本会话复核一致),无维护风险。版本节奏:Matplotlib 3.11.x 在 2026 年内发了三个版本;Plotly 在 2026 年 8–9 月完成 plotly.js 4.0 + plotly.py 7.0 的大版本同步;Mermaid 一年内从 11.13 推进到 12.3,节奏偏快——对个人工具链意味着升级时需留意渲染行为变化。"升级后旧图渲染/观感变化"在 Mermaid 的升级史上屡有实例:v12 官方把默认布局引擎从 dagre 换成 ELK,旧流程图会被重排(GitHub Releases;layouts 文档);v10 的 ESM/API 破坏曾迫使下游推迟升级(discussion #4148;mkdocs-material #5217);下游社区亦有升级后 Mermaid 图配色失效的反馈(Obsidian 论坛)。把这一模式概括为"著称",是作者基于上述案例的经验判断,而非系统统计。替代方案中,Graphviz/PlantUML 是二十年级老将;D2(现迁移至 d2lang/d2 组织,25,798 星,MPL-2.0)年轻但增长快,2026 年评测已将其列入主流推荐(D2 官方 FAQ;Diagrams as Code 2026 landscape)。

2.5 替代方案逐项短评

2.6 场景 → 首选速查(静态报告优先视角)

场景首选理由
论文/静态报告插图(PNG/PDF/SVG)Matplotlib出版级控制力原生最强,生态兼容性佳(usedatabrain 2026 评测)
快速统计探索图Seaborn / Matplotlib一行调用的统计图,底层兼容
HTML 交互交付、3D 数据、仪表盘Plotly交互与 3D 强项突出(评测见 2.4),静态导出走 Kaleido 兜底
大数据量/流式 Web 应用Bokeh多篇对比认为其在该细分场景强于 Plotly(pauliacomi 2020、ajmani.dev、Fastero)
商业风格大屏/报表(中文语境)ECharts(pyecharts)图表类型全、中文社区资料多
从零定制可视化产品D3.js上限最高,成本最高
README/笔记/文档里的流程图、时序图Mermaid平台原生渲染零配置(GitHub 文档)
复杂 UML、时序密集建模PlantUML词汇量最大
要现代美感的架构图D2布局引擎(ELK/TALA)与美观度最佳

三、交叉洞察:两轴结合说明了什么

洞察一:"三件套"是二十多年收敛出的正交分层,不是拼凑

纵轴显示,三条线分别在三个不同年代解决三个不同问题:2003 年的 Matplotlib 解决"Python 没有出版级绘图",2015 年开源的 plotly.js 解决"交互图没有语言无关底座",2014 年诞生、2022 年被 GitHub 收编的 Mermaid 解决"结构图无法随文档版本化"。横轴则显示,2026 年截面上每一层都找不到"同时替代两者"的竞品:Seaborn/Altair/Bokeh 没有一个同时给出"出版级控制力 + Python 全生态兼容",PlantUML/D2 再强也进不了 GitHub 原生渲染。两轴互证的结论是:这组选型不是三个工具的偶然相遇,而是市场在三个正交层位上各自收敛出的"事实标准或头部玩家"——所以正确的心智模型是"分层路由",而不是"主备替换"。

洞察二:平台渗透率压倒技术上限——选型的第一变量在工具之外

纵轴的每次范式改写,触发器都不是工具本身的能力升级,而是平台事件:Jupyter 把"代码+图+文字"装进同一画布,交互图的价值才被放大;GitHub 2022-02-14 的一次功能发布,就让 Mermaid 从"又一个文本绘图工具"跃升为 Markdown 世界的默认;LLM 的兴起则让"文本进、图出"的三件套整体价值重估。横轴给出了同一规律的最直观数据:表达力更强、UML 词汇量更大的 PlantUML(13,401 星)和美观度更高的 D2(25,798 星),都输给了"哪里都能渲染"的 Mermaid(91,020 星)。对个人用户的推论很直接:选型时先问"我的图最终在哪里被看",再问"哪个工具画得好"——下游渲染平台的渗透率,比工具的技术上限更能决定长期收益。

洞察三:静态导出是全链路的共同软肋,恰是"静态报告优先"者的主战场

把两章的能力表叠在一起看,会发现一个被分开叙述时各自不明显、合并后立刻凸显的事实:三件套里只有 Matplotlib 的静态导出是一等公民。Plotly 的静态导出要走 Kaleido(额外拉起一份 Chromium,且 v1 重构后 API 出过不兼容变化),Mermaid 的静态导出要走 mermaid-cli(同样基于 Puppeteer/Chromium);换言之,整条工具链要产出印刷级 PNG/PDF/SVG,有两条路都压在"无头浏览器"这个又重又脆的依赖上。Matplotlib 3.11 在 2026 年做的"字体与文本管线大修"则是在持续加固它天然的那一段。这对"静态报告优先"的本课题倾向是决定性的:Matplotlib 不是三件套之一,而是三件套的锚——任何图(包括 Plotly 图和 Mermaid 图的导出物)最终都要落到"能可靠打印"的静态形态上,而链上只有 Matplotlib 这一段是从未需要借道浏览器的。

洞察四:升级节奏差异决定版本策略——Matplotlib 慢、Plotly 中、Mermaid 快

横轴的成熟度数据放到纵轴上看,三个工具的风险画像完全不同:Matplotlib 二十余年间破坏性大版本跨越仅 3 次(0.x→1.0→2.0→3.0,其中 2.0 重做默认样式、3.0 进入 3.x 时代),其余年份保持小步节奏,且受 NEP 29 / SPEC 0 政策约束,个人用户几乎可以无脑跟随;Plotly 2021/2025/2026 三年三大版(5.0/6.0/7.0),破坏点集中在 Jupyter 集成与 Kaleido,核心绘图 API 相对稳定,跟随升级的成本可控;Mermaid 则在三年内做了两次破坏性现代化(v10 弃 UMD/CommonJS、v12 换默认布局引擎 ELK 并抬高运行时门槛),且"升级后旧图渲染/观感变化"屡有实例(证据见 2.4 成熟度节;"著称"云云为作者经验判断)。据此,个人工具链的版本策略应当差异化:Matplotlib 跟随最新,Plotly 跟随大版本并同步看 Kaleido 变更说明,Mermaid 锁定大版本、升级前先批量重渲染旧图做 diff。

洞察五:AI 把选型重心从"学语法"改写为"管产线"

纵轴第四次改写("人写还是 AI 写")与横轴的学习成本数据交叉后,得到一个对投入方向很有指导性的结论:三个工具恰好都是"文本进、图出"的产物,都处在 LLM 最擅长生成的那类输出上——Mermaid 语法面最窄、声明式、容错,因此是 AI 生成成功率最高、事实上已经标准化的结构图输出格式;Matplotlib/Plotly 代码则是 AI 编程助手"现场出图"的标准产物。这意味着个人用户继续重仓"背 API"的边际收益正在快速下降(AI 随时能写出正确的 plt.subplots 或 px.scatter),而上升的是另两件事:一是判断力——能一眼看出 AI 生成的图哪里在撒谎(截断的 y 轴、误导的配色、错误的聚合);二是产线管理能力——版本锁定、静态导出兜底、渲染 diff 这些"下游可靠性"工作,恰恰是 AI 不会替你做的。

对用户的判断与建议(静态报告优先)

  1. 采用横轴章的推荐组合,并按洞察三加一条锚定原则:Matplotlib + Seaborn(数据图静态产出)、Plotly + Kaleido(交互探索,可导出静态兜底)、Mermaid + mermaid-cli(文档示意图与静态导出)。三者许可均为宽松型(BSD 兼容/MIT),零许可成本,维护主体全部活跃(最近推送均在最近一个月内,见核验记录)。原则:任何新图先通过"静态导出测试"——验证它能无损落成 PNG/PDF/SVG,再决定是否进入工具链。
  2. 默认路由规则:论文/PDF/印刷插图 → Matplotlib(快速统计图叠 Seaborn);HTML 交付、3D、仪表盘 → Plotly;README/笔记/PR 里的流程图与时序图 → Mermaid;Mermaid 画乱了的复杂结构图 → 降级 PlantUML(重 UML)或 D2(重美感);大数据流式应用 → Bokeh;中文商业大屏 → ECharts/pyecharts。
  3. 版本策略按洞察四差异化:Matplotlib 跟随 3.11.x;plotly.py 大版本升级时同步核对 Kaleido 与 Jupyter 集成的变更说明;Mermaid 锁定 12.x——注意"锁 CLI ≠ 锁渲染核心":mermaid-cli 12.2.0 声明依赖 mermaid@^12.2.0,semver 上允许 12.3.0 进入,须用锁文件把核心库一并钉死(见 2.2 与下文"最小可用配置");升级前对存量图做批量重渲染 diff(12.x 的 ELK 默认布局会重排旧图)。
  4. 成本上接受但要知情:Kaleido 与 mermaid-cli 各自带一份 Chromium,磁盘与内存开销是这条工具链的主要"隐性税";PlantUML 需要 Java,不建议作为个人链的默认携带项,按需临时使用即可。
  5. 投入方向按洞察五调整:与其精修 API 记忆,不如投资两类能力——读图判断力(识别误导性可视化),以及渲染产线管理(锁定、导出、diff、评审),后者正是"静态报告优先"工作流里无法外包给 AI 的部分。

最小可用配置(读完即可落地)

Matplotlib:出版级静态输出 + 中文字体

import matplotlib.pyplot as plt

plt.rcParams["figure.dpi"] = 120            # 屏幕预览清晰度
plt.rcParams["savefig.dpi"] = 300           # 导出印刷级分辨率
plt.rcParams["font.sans-serif"] = ["Microsoft YaHei"]   # Windows 中文;macOS 用 PingFang SC,Linux 用 Noto Sans CJK SC
plt.rcParams["axes.unicode_minus"] = False  # 中文字体下负号显示修复

fig.savefig("out.png")   # 或 .pdf / .svg——导出不经过浏览器,这正是 Matplotlib 作"锚"的原因

3.11 的字体管线翻修改善了一致性,但"显式声明字体"仍是中文环境的第一原则:不写这两行,默认 DejaVu Sans 会在汉字位置显示方框、负号丢失。

Plotly + Kaleido:交互 + 静态兜底

pip install "plotly==7.1.0" "kaleido>=1.3"   # plotly.py 7.1.0 的 kaleido extra 要求 kaleido>=1.3.0(PyPI requires_dist 实查),当前 1.5.0 满足
plotly_get_chrome                            # Kaleido v1 起不再捆绑 Chrome,需一次性安装(Python 内等价写法:pio.get_chrome())
import plotly.express as px

fig = px.scatter(px.data.iris(), x="sepal_width", y="sepal_length", color="species")
fig.show()                            # 交互视图:需 Jupyter Notebook ≥ 7 / JupyterLab(plotly.py 6 起不再支持更旧的 Notebook,FigureWidget 改基于 anywidget、需 pip install anywidget——见官方 v6 迁移指南)
fig.write_image("out.png", scale=2)   # 静态兜底:由 Kaleido 调本机 Chrome 渲染

Mermaid + mermaid-cli:结构图 + 锁版本

npm init -y
npm install -D @mermaid-js/mermaid-cli@12.2.0   # package.json + 锁文件把 CLI 与 mermaid 核心一起钉死
npx mmdc -i diagram.mmd -o diagram.svg -c mermaid.config.json

mermaid.config.json 里显式声明中文字体(导出由无头 Chromium 调用系统字体完成):

{ "themeVariables": { "fontFamily": "Microsoft YaHei" } }

注意:不带锁文件时,CLI 12.2.0 声明的 mermaid@^12.2.0 会拉到当前最新的 12.3.0,渲染核心随之漂移——这正是 2.2 所说"锁 CLI ≠ 锁渲染核心"的落地含义。


四、参考来源

Matplotlib

Plotly

Mermaid 与 Diagram-as-Code

竞品与第三方评测


附录:本综合稿核验记录(2026-11-06,综合会话与修订会话内执行)

执行方式:curl + Python(-I 模式)解析注册表 JSON。目的:调和两章的口径分歧、修正纵轴章基于检索摘要的时间线误记;修订会话另按独立审读意见补核若干此前无出处或口径含混的条目(第 7–9 条)。

  1. plotly.py 7.x 发布日(两章口径不一:纵轴章记 7.0.0 于 2026-08-25 上 PyPI、横轴章记"7.0 与 plotly.js 4.0 于 2026-09-18 前后同步发布")
    • 命令:curl https://pypi.org/pypi/plotly/7.0.0/json、curl https://pypi.org/pypi/plotly/7.1.0/json
    • 输出:plotly 7.0.0 -> 2026-08-25T17:47:24Z;plotly 7.1.0 -> 2026-09-15T19:21:18Z
    • 结论:采用 PyPI 口径,7.0.0 于 2026-08-25 上架;横轴章"9 月 18 日前后"应为官方社区综合发布说明的成文时间,不是 7.0.0 的上架时间。
  2. Mermaid v12 时间线(纵轴章记"v12 于 2025 下半年发布",且自称确切日期未核实)
    • 命令:curl "https://api.github.com/repos/mermaid-js/mermaid/releases?per_page=100&page=1"(并取第 2 页,按 tag mermaid@x.y.z 匹配)
    • 输出:mermaid@11.12.0 -> 2025-09-18;mermaid@11.13.0 -> 2026-03-09;mermaid@12.0.0 -> 2026-09-10;mermaid@12.1.0 -> 2026-10-02;mermaid@12.2.0 -> 2026-10-13;mermaid@12.3.0 -> 2026-11-03
    • 结论:v12.0.0 实际发布于 2026-09-10,纵轴章"2025 下半年"为误记;11.13.0(2026-03)在 v12 之前,11.x 收官后 12.x 接棒,时间线理顺。
  3. Matplotlib 3.11.x 日期口径:curl https://pypi.org/pypi/matplotlib/{3.11.0,3.11.1,3.11.2}/json → 上架时间分别为 2026-06-12 / 07-18 / 09-11,比横轴章所记公告日(06-11 / 07-17 / 09-10)统一晚一天,属"公告日 vs PyPI 上架日"的口径差,不是矛盾;正文采用公告日并注明 PyPI 口径。
  4. 三主角星数/推送复核:curl https://api.github.com/repos/{matplotlib/matplotlib, plotly/plotly.js, mermaid-js/mermaid} → 23,427(推送 2026-11-05)/ 18,376(2026-10-29,MIT)/ 91,020(2026-11-05,MIT),与横轴章核验值完全一致。
  5. Dash 版本(纵轴章记"4.5.0,2026-07",检索摘要口径):curl https://api.github.com/repos/plotly/dash/releases/latest → v4.5.0,发布于 2026-10-29;正文已按此修正。
  6. 配套工具版本复核:curl https://pypi.org/pypi/kaleido/json → 1.5.0;curl https://registry.npmjs.org/@mermaid-js/mermaid-cli/latest → 12.2.0,与横轴章一致。
  7. pyecharts 星数与 npm 口径补核(修订会话执行,回应审读意见):
    • curl https://api.github.com/repos/pyecharts/pyecharts → 15,781 星、最近推送 2026-10-26、MIT——证实正文 2.4 所引"15,781 星"数值无误,并补上此前缺失的出处;
    • curl https://registry.npmjs.org/mermaid/latest → 12.3.0,证实正文"当前 npm latest"口径(此前附录第 2 条只覆盖 GitHub Releases 的发布日期,未覆盖 npm 口径);
    • curl https://registry.npmjs.org/@mermaid-js/mermaid-cli/12.2.0 → dependencies 含 "mermaid": "^12.2.0"(以及 chalk、katex 等),用于 2.2 的 CLI↔核心版本对应说明。
  8. plotly.js 4.0.0 本体发布时间(修订会话执行,回应审读意见):curl "https://api.github.com/repos/plotly/plotly.js/releases?per_page=100" → tag v4.0.0 的 published_at 为 2026-08-24T20:57:00Z,即 plotly.py 7.0.0 上架 PyPI(2026-08-25)前一天;同页可见 plotly.js 当前最新为 v4.2.0(2026-10-29)。
  9. plotly.py 7.1.0 与 Kaleido 的版本配对(修订会话执行,回应审读意见):curl https://pypi.org/pypi/plotly/7.1.0/json → requires_dist 含 kaleido>=1.3.0(extra "kaleido");kaleido 当前 1.5.0 满足该约束。另据官方静态导出文档:Kaleido v1 起不再捆绑 Chrome,需经 plotly_get_chrome(CLI)或 pio.get_chrome()(Python)一次性安装(https://plotly.com/python/static-image-export)。

仍未核验的事项:Mermaid Chart 融资金额(750 万美元种子轮)、Mermaid 用户数(800 万)、Plotly 的 Databricks 合作细节、Plotly 2026 年产品动作(MCP 支持、Plotly Cloud、Plotly Studio Embedded)均为检索摘要口径,文中已标注;Graphviz 星数未核验;本报告为文献综述与注册表核验,未运行绘图类功能测试(课题性质不要求)。

← 资料库今日播报 →