Matplotlib(pyplot)savefig输出空白图像

tyl*_*ler 136 python image matplotlib figure

我正在尝试使用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)
Run Code Online (Sandbox Code Playgroud)

并且tessstttyyy.png是空白的(也尝试使用.jpg)

Yan*_*ann 227

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

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

  1. 打电话plt.savefig('tessstttyyy.png', dpi=100)前打电话plt.show()

  2. show()通过调用plt.gcf()"获取当前数字" 将数字保存在您之前,然后您可以随时调用savefig()Figure对象.

例如:

fig1 = plt.gcf()
plt.show()
plt.draw()
fig1.savefig('tessstttyyy.png', dpi=100)
Run Code Online (Sandbox Code Playgroud)

在你的代码中,'tesssttyyy.png'是空白的,因为它保存了新的数字,没有绘制任何内容.

  • 特殊情况发生在`jupyter`笔记本中,启用了'%matplotlib inline`:`savefig`调用必须与绘图创建方法位于同一单元格中. (3认同)
  • 是的,我完全删除了节目并且它有效,但这有意义.... (2认同)
  • 有趣的是看到`plt.show()`生成一个新图像.实际上,这解决了这个问题. (2认同)

JAG*_*024 75

plt.show() 应该来 plt.savefig()

  • `plt.show()`清除整个事情,所以之后的任何事情都会发生在一个新的空图上. (12认同)
  • 这是唯一帮助我的方法。 (3认同)
  • 这就是拯救我屁股的原因!:DI真的不明白为什么要以这样一种方式来实现它,即情节在显示图像时会擦除所有内容。可怜... (2认同)

小智 7

在 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()
Run Code Online (Sandbox Code Playgroud)


Beh*_*ari 5

更改功能的顺序为我解决了问题

  • 首先 保存情节
  • 然后 显示剧情

如下:

plt.savefig('heatmap.png')

plt.show()
Run Code Online (Sandbox Code Playgroud)