1. GridSpec基础:突破常规子图布局的限制
当你第一次接触Matplotlib的子图绘制时,plt.subplots()可能是最常用的方法。它能快速生成整齐排列的网格状子图,就像教室里的课桌椅一样规整。但当我们遇到需要首行3图、次行2图居中排列这种"不规则课桌摆放"需求时,传统方法就显得力不从心了。
这就是GridSpec大显身手的时候。作为Matplotlib中的"高级布局引擎",GridSpec的工作原理就像一张虚拟的网格纸:
- 首先定义网格的行列数(比如2行6列)
- 然后通过切片语法指定每个子图占据的网格区域
- 最后在这些区域上"放置"实际的子图
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
fig = plt.figure(figsize=(10, 6))
gs = gridspec.GridSpec(2, 6) # 2行6列的网格
ax1 = fig.add_subplot(gs[0, :2]) # 首行前两列
ax2 = fig.add_subplot(gs[0, 2:4]) # 首行中间两列
ax3 = fig.add_subplot(gs[0, 4:]) # 首行最后两列
ax4 = fig.add_subplot(gs[1, 1:3]) # 次行中间两列(居中)
ax5 = fig.add_subplot(gs[1, 3:5]) # 次行中间两列(居中)
这种方法的精妙之处在于,通过调整网格划分和切片范围,我们可以实现各种复杂的布局需求。比如将gs[1, 1:3]改为gs[1, 2:4],就能微调下方两个子图的水平位置。
2. 实战2行5图居中布局:从原理到实现
让我们通过一个完整的图像处理示例,演示如何实现专业论文中常见的2行5图布局。假设我们要展示原始图像、加噪图像和滤波结果:
<
&spm=1001.2101.3001.5002&articleId=155584636&d=1&t=3&u=81229416c78f4708aa53afade454199c)
227

被折叠的 条评论
为什么被折叠?



