Matplotlib(pyplot)savefig输出空白图像

时间:2012-01-26 00:30:33

标签: 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)

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

6 个答案:

答案 0 :(得分:180)

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

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

  1. 在致电plt.savefig('tessstttyyy.png', dpi=100)

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

  4. 例如:

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

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

答案 1 :(得分:57)

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

之后

答案 2 :(得分:5)

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

  • 第一 保存地块
  • 然后 显示情节

如下:

plt.savefig('heatmap.png')

plt.show()

答案 3 :(得分:3)

psexec \\RemotePCName -u username -p password cmd.exe "/c sc stop servicename" 之后调用plt.show(),您的问题应该可以解决。

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

在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()