MCM520 ← 资料站首页 Matplotlib(Python)(深度版) 打开交互阅读器 →

Matplotlib(Python)(深度版)

最通用的程序化绘图库,论文配图默认选择

一、一句话定位

最通用的程序化绘图库,论文配图默认选择

二、为什么是它:设计哲学与底层逻辑

Matplotlib 的核心是"面向对象 + 命令式"的绘图范式:一切皆 Artist(Figure/Axes/Line2D/Text),你显式构造对象、调用方法改属性,对图形有像素级控制。它有两种接口——pyplot(stateful 快捷)与 OO(Axes,推荐),后者把"图"建模为可组合的对象树,便于精确排版(多子图对齐、共享轴、注释)。它的哲学是"你写代码 = 你描述图形",因此天然可复现、可版本控制,是论文定稿图的事实标准。代价是默认样式朴素、精细调参有学习成本——但正是这种"显式控制"换来了出版级精度与可复现性。## 三、渲染管线与可复现性推导
渲染管线分三层:①Artist(描述画什么,存于 Figure 对象树);②FigureCanvas(绑定后端,决定输出设备);③Renderer(把 Artist 光栅化/矢量化)。矢量后端(PDF/SVG)输出的是几何指令而非像素:

输出={(pathi, stylei)}i=1N \text{输出}=\{( \text{path}_i,\ \text{style}_i)\}_{i=1}^{N}

故放大无损、文字可选。可复现性:脚本即规格,重跑得同图(固定 rcParams 与数据),版本控制 diff 友好——这是"论文重跑一键出图"的底层保障。复杂度代价:精细排版需理解对象层级,学习曲线中等偏陡。## 四、适用场景

  • 需要批量、可复现、可随数据自动更新的论文配图
  • 画折线/柱状/散点/热力/子图网格等标准图
  • 要和 NumPy/Pandas 数据流程无缝衔接

五、优点

  • ✅ 免费开源、生态最大(Seaborn/Plotnine 都基于它)
  • ✅ 完全程序化,论文重跑一键出图,版本可控
  • ✅ 子图、双轴、注释、公式、矢量导出(pdf/svg)全覆盖
  • ✅ 社区答案极多,几乎任何图都能找到范例

六、缺点

  • ⚠️ 默认样式丑,需要手动调参才好看
  • ⚠️ 交互弱, exploratory 分析不如 Plotly
  • ⚠️ 复杂排版(多子图对齐)学习曲线陡

七、上手难度

中等

八、典型用途

  • 论文所有静态配图
  • 数据探索后的定稿图
  • 和 Python 代码模板串成自动化出图

九、与谁搭配

搭配 NumPy/Pandas 做数据处理,搭配 Seaborn 快速出统计图,搭配 Plotly 做交互版

十、学习资源

  • 官方 gallery(按图搜代码最快)
  • 《Python数据可视化模板.py》(本站资料)
  • 中文:matplotlib 配色与样式教程

本篇来自《绘图软件横评(深度版)》· 数学建模学习资料站 MCM520

9、实战案例

案例场景:用 Matplotlib 绘制论文常用的柱状图、折线图、散点图。

完整代码

import matplotlib.pyplot as plt
import numpy as np

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False

# 柱状图:方案评分对比
fig, ax = plt.subplots(figsize=(8, 4))
schemes = ['方案A', '方案B', '方案C', '方案D']
scores = [85.2, 92.1, 78.6, 88.9]
colors = ['#2563eb', '#16a34a', '#f59e0b', '#dc2626']

bars = ax.bar(schemes, scores, color=colors, edgecolor='white')
for bar, score in zip(bars, scores):
    ax.text(bar.get_x() + bar.get_width()/2, bar.get_height() + 1,
            f'{score:.1f}', ha='center', va='bottom', fontsize=11, fontweight='bold')

ax.set_ylabel('评分', fontsize=12)
ax.set_title('四个方案综合评分对比', fontsize=14, fontweight='bold')
ax.set_ylim(0, 100)
ax.grid(axis='y', alpha=0.3)
plt.tight_layout()
plt.savefig('chart.png', dpi=300)
plt.show()

实战案例

Matplotlib 论文绘图实战

场景:论文需 2×2 子图展示四种算法在收敛速度、精度上的对比。
任务:用 Matplotlib 画出版级组合图。

完整代码(python)

import matplotlib.pyplot as plt
import numpy as np
plt.style.use('seaborn-v0_8-whitegrid')
fig, ax = plt.subplots(2, 2, figsize=(10, 8))
x = np.linspace(0,10,100)
ax[0,0].plot(x, np.sin(x)); ax[0,0].set_title('sin')
ax[0,1].scatter(np.random.rand(50), np.random.rand(50), alpha=.6)
ax[1,0].hist(np.random.randn(1000), 30, edgecolor='k')
ax[1,1].bar(['A','B','C'], [23,45,56], color='steelblue')
for a in ax.ravel(): a.grid(alpha=.3)
plt.tight_layout(); plt.savefig('fig.png', dpi=300)

运行效果

子图 内容
(0,0) 折线 sin(x)
(0,1) 散点相关性
(1,0) 直方图分布
(1,1) 柱状对比
savefig dpi=300 满足期刊出版要求,tight_layout 防裁切。