Matplotlib (pyplot) savefig输出空白图像

我试图保存我使用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)

326869 次浏览

首先,当T0 is not None时发生了什么?我将测试它,然后调整传递给plt.subplot()的值;可以尝试值131、132和133,或者取决于T0是否存在的值。

其次,在plt.show()被调用之后,一个新的图形被创建。要解决这个问题,你可以

  1. 在调用plt.show()之前先调用plt.savefig('tessstttyyy.png', dpi=100)

  2. 通过调用plt.gcf()来“获取当前数字”,在你show()之前保存这个数字,然后你可以随时在这个Figure对象上调用savefig()

例如:

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

在您的代码中,'tesssttyy .png'是空白的,因为它正在保存新的图形,没有任何绘图。

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

解释:plt.show()清除整个东西,所以之后的任何事情都将发生在一个新的空数字上

让我举一个更详细的例子:

import numpy as np
import matplotlib.pyplot as plt




def draw_result(lst_iter, lst_loss, lst_acc, title):
plt.plot(lst_iter, lst_loss, '-b', label='loss')
plt.plot(lst_iter, lst_acc, '-r', label='accuracy')


plt.xlabel("n iteration")
plt.legend(loc='upper left')
plt.title(title)
plt.savefig(title+".png")  # should before plt.show method


plt.show()




def test_draw():
lst_iter = range(100)
lst_loss = [0.01 * i + 0.01 * i ** 2 for i in xrange(100)]
# lst_loss = np.random.randn(1, 100).reshape((100, ))
lst_acc = [0.01 * i - 0.01 * i ** 2 for i in xrange(100)]
# lst_acc = np.random.randn(1, 100).reshape((100, ))
draw_result(lst_iter, lst_loss, lst_acc, "sgd_method")




if __name__ == '__main__':
test_draw()

enter image description here

改变函数修复问题的顺序:

  • 第一个 保存情节
  • 然后 显示情节

如下:

plt.savefig('heatmap.png')


plt.show()

在show()之前调用savefig对我有用。

fig ,ax = plt.subplots(figsize = (4,4))
sns.barplot(x='sex', y='tip', color='g', ax=ax,data=tips)
sns.barplot(x='sex', y='tip', color='b', ax=ax,data=tips)
ax.legend(['Male','Female'], facecolor='w')


plt.savefig('figure.png')
plt.show()