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

Matplotlib GridSpec行间距消除问题求助:多尺寸图像排版异常

解决Matplotlib中不同尺寸图像的行间距问题

我来帮你搞定这个行间距的困扰!问题出在你每行图像的宽高比不一样,虽然你设置了hspace=0消除了子图之间的间距,但默认的网格每行高度是统一的,导致图像在子图里无法填满,上下出现空白,看起来像是有行间距。下面是具体的解决方案:

核心思路

要让图像完全填满子图,需要让每个子图的尺寸比例和对应行的图像宽高比匹配。我们可以通过两个步骤实现:

  1. 调整网格的行高比例,对应每行图像的宽高比
  2. 给每个子图设置匹配的图像显示比例

修改后的代码

import matplotlib.pyplot as plt

# 假设你的slices数据已经准备好
# slices[0]是4张(174×145)的图像,slices[1]是4张(145×145),slices[2]是4张(145×174)

fig = plt.figure(figsize=(10, 10))

# 根据每行图像的宽高比设置行高比例
# 行高比例 = 图像高度 / 图像宽度(因为子图宽度固定,高度要对应图像的高宽比)
row_height_ratios = [145/174, 1, 174/145]
gs = fig.add_gridspec(3, 4, hspace=0, wspace=0, height_ratios=row_height_ratios)

for r in range(3):
    for c in range(4):
        ax = fig.add_subplot(gs[r, c])
        # 根据行设置对应的图像显示比例
        if r == 0:
            # 第一行图像宽174,高145,比例为宽/高
            aspect = 174/145
        elif r == 1:
            # 第二行是正方形,比例1:1
            aspect = 1
        else:
            # 第三行图像宽145,高174,比例为宽/高
            aspect = 145/174
        # 显示图像时指定aspect,确保比例正确
        ax.imshow(slices[r][c].T, origin="lower", cmap="gray", aspect=aspect)
        ax.axis("off")

plt.show()

为什么这样能解决问题?

  • height_ratios让网格的每行高度和图像的高宽比对应,确保子图的尺寸刚好能容纳对应行的图像
  • 给imshow指定aspect参数,让图像按照原始比例填充子图,不会拉伸变形
  • 结合hspace=0,子图之间没有额外间距,图像就能无缝拼接在一起

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:41:04