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

Matplotlib连续imshow不同数组后savefig生成相同图片的问题求助

解决Matplotlib保存重复图片/空白图片的问题

问题根源

你的代码里两次imshow共用了同一个默认画布,第二次imshow虽然加载了新图,但画布上还残留着第一张图的内容,导致保存的两张图重复。而直接用plt.clf()会清空整个画布,但第二次imshow后未触发强制渲染,导致保存出空白图。

可行解决方案

方案1:每次绘图后关闭画布(推荐)

每次保存完图片就关闭当前画布,确保下一次绘图使用全新的画布:

import matplotlib.pyplot as plt

plt.imshow(images[0])
plt.savefig("image0.png")
plt.close()  # 关闭当前画布

plt.imshow(images[1])
plt.savefig("image1.png")
plt.close()

方案2:显式创建独立的Figure对象

手动创建不同的Figure和Axes对象,彻底隔离两次绘图逻辑:

import matplotlib.pyplot as plt

# 处理第一张图
fig1, ax1 = plt.subplots()
ax1.imshow(images[0])
fig1.savefig("image0.png")
plt.close(fig1)

# 处理第二张图
fig2, ax2 = plt.subplots()
ax2.imshow(images[1])
fig2.savefig("image1.png")
plt.close(fig2)

方案3:清除画布后强制重绘

如果一定要保留默认画布的使用方式,可以在第二次imshow后强制触发渲染:

import matplotlib.pyplot as plt

plt.imshow(images[0])
plt.savefig("image0.png")
plt.clf()  # 清空画布

plt.imshow(images[1])
plt.draw()  # 强制绘制内容
plt.savefig("image1.png")

补充说明

  • plt.close()会彻底释放画布资源,避免长期运行的内存占用问题;
  • 显式创建Figure/Axes是Matplotlib推荐的面向对象用法,逻辑更清晰,也方便后续添加标题、坐标轴等自定义设置;
  • 如果两张图的色彩映射、尺寸不同,建议在imshow中显式指定cmap、aspect等参数,避免继承上一次的绘图配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 00:07:07