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

Python使用subplot显示多图时如何去除多余图表?

解决Matplotlib显示图像时出现多余空图表的问题

问题原因

你的代码核心错误是在for循环内部重复创建size×2的子图网格:每次循环都会生成一个包含size行、2列的子图布局,但你只给第i行的两个子图填充了图像,剩下的size-1行子图都是空的,这些空区域就是你看到的“多余图表”。

解决方案

方案一:一次性创建所有子图,循环填充(推荐)

把创建子图的代码移到循环外面,提前生成所有需要的子图位置,再逐行填充图像:

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

# 替换为你的实际图像对数量
size = 3
# 提前创建size行2列的子图网格,可通过figsize调整整体布局大小
f, axarr = plt.subplots(size, 2, figsize=(10, 5*size))

for i in range(size):
    # 注意:这里的路径建议改为动态路径,比如 PATHTOMYIMAGE = f"image_{i}.png"
    img = mpimg.imread(PATHTOMYIMAGE)
    img2 = mpimg.imread(PATHTOMYIMAGE2)
    
    axarr[i, 0].imshow(img)
    axarr[i, 1].imshow(img2)
    
    # 可选:隐藏坐标轴,让图像显示更干净
    axarr[i, 0].axis('off')
    axarr[i, 1].axis('off')

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

方案二:每次循环仅创建单对图像子图

如果希望每次循环只显示一对图像(而非一次性展示所有),可以在循环内创建1×2的子图:

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

size = 3
for i in range(size):
    img = mpimg.imread(PATHTOMYIMAGE)
    img2 = mpimg.imread(PATHTOMYIMAGE2)
    
    # 每次循环创建1行2列的子图
    f, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 5))
    ax1.imshow(img)
    ax2.imshow(img2)
    
    ax1.axis('off')
    ax2.axis('off')
    plt.tight_layout()
    plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 14:17:30