保存图像输出空白图像

348 投票
5 回答
393265 浏览
提问于 2025-04-17 11:06

我正在尝试保存我用matplotlib制作的图表,但保存下来的图片都是空白的。

这是我的代码:

plt.subplot(121)
plt.imshow(dataStack, cmap=mpl.cm.bone)

plt.subplot(122)
y = copy.deepcopy(tumorStack)
y = np.ma.masked_where(y == 0, y)

plt.imshow(dataStack, cmap=mpl.cm.bone)
plt.imshow(y, cmap=mpl.cm.jet_r, interpolation='nearest')

if T0 is not None:
    plt.subplot(123)
    plt.imshow(T0, cmap=mpl.cm.bone)

    #plt.subplot(124)
    #Autozoom

#else:
    #plt.subplot(124)
    #Autozoom

plt.show()
plt.draw()
plt.savefig('tessstttyyy.png', dpi=100)

而且tessstttyyy.png也是空白的(我也试过用.jpg格式)

5 个回答

37

调整函数的顺序解决了我的问题

  • 首先 保存 图表
  • 然后 显示 图表

如下所示:

plt.savefig('heatmap.png')

plt.show()
268

plt.show() 应该在 plt.savefig() 之后使用

解释:plt.show() 会清空当前的图形,所以在它之后的任何操作都会在一个新的空白图形上进行

501

首先,当 T0 is not None 时会发生什么呢?我会先测试一下这个情况,然后调整我传给 plt.subplot() 的参数;可以尝试 131、132 和 133 这些值,或者根据 T0 是否存在来决定传什么值。

其次,在调用 plt.show() 之后,会创建一个新的图形。为了处理这个问题,你可以:

  1. 在调用 plt.show() 之前,先调用 plt.savefig('tessstttyyy.png', dpi=100) 来保存图形。

  2. 在显示图形之前先保存,可以通过调用 plt.gcf() 来获取当前图形,然后在这个 Figure 对象上随时调用 savefig()

举个例子:

fig1 = plt.gcf()
plt.show()
plt.draw()
fig1.savefig('tessstttyyy.png', dpi=100)

在你的代码中,'tesssttyyy.png' 是空白的,因为它保存的是新的图形,而这个图形上什么都没有绘制。

撰写回答