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
相关产品推荐
相关产品推荐

