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

