You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免Matplotlib中绘制图像数量增加时图像尺寸缩小

解决Matplotlib子图随数量增加而缩小的问题

这个问题的核心是你固定了整个画布的尺寸(figsize=(25,25)),当子图数量增多时,每个子图能分配到的空间自然就被压缩了。这里有几个直接有效的解决方案:

方法1:根据子图数量动态计算画布尺寸

最直观的方式是给每个子图设定固定的预期大小,然后根据子图的行列数动态算出整个画布的尺寸。这样不管你要画多少组图,每个子图的显示大小都能保持一致。

举个例子,假设你希望每个子图的宽和高都是5,那代码可以改成这样:

start, end = 0, 6  # 这里可以是任意数量的图像组
per_subplot_w = 5  # 每个子图的预期宽度
per_subplot_h = 5  # 每个子图的预期高度
n_cols = 3
n_rows = len(images_dict[start:end])

# 动态计算整个画布的尺寸
fig = plt.figure(figsize=(n_cols * per_subplot_w, n_rows * per_subplot_h))

for i, d in enumerate(images_dict[start:end]):
    ax1 = fig.add_subplot(n_rows, n_cols, n_cols * i + 1)
    ax2 = fig.add_subplot(n_rows, n_cols, n_cols * i + 2)
    ax3 = fig.add_subplot(n_rows, n_cols, n_cols * i + 3)
    ax1.imshow(d['filled'])
    ax1.set_title(d['name'])
    ax2.imshow(d['img'])
    ax3.imshow(d['overlay'])

# 自动调整子图间距,避免标题、图像互相重叠
plt.tight_layout()
plt.show()

方法2:调整子图间距与布局

如果不想大幅改变画布尺寸,也可以通过调整子图之间的间距来缓解拥挤问题,同时配合tight_layout()或者subplots_adjust()来优化布局:

start, end = 0, 6
n_cols = 3
n_rows = len(images_dict[start:end])
fig = plt.figure(figsize=(25, 25))

for i, d in enumerate(images_dict[start:end]):
    # 子图添加逻辑和之前一样
    ax1 = fig.add_subplot(n_rows, n_cols, n_cols * i + 1)
    ax2 = fig.add_subplot(n_rows, n_cols, n_cols * i + 2)
    ax3 = fig.add_subplot(n_rows, n_cols, n_cols * i + 3)
    ax1.imshow(d['filled'])
    ax1.set_title(d['name'])
    ax2.imshow(d['img'])
    ax3.imshow(d['overlay'])

# 手动调整子图间距,wspace是水平间距,hspace是垂直间距
plt.subplots_adjust(wspace=0.1, hspace=0.3)
plt.tight_layout()
plt.show()

补充说明

原来的代码中,当你增加图像数量时,n_rows会变大,但画布高度还是固定的25,所以每行的可用高度会被摊薄,子图自然就缩小了。方法1从根源上解决了这个问题——让画布随着子图数量同步放大,保证每个子图的空间足够。

内容的提问来源于stack exchange,提问作者YellowPillow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:54:01