关于python:Matplotlib(pyplot)savefig输出空白图像

Matplotlib (pyplot) savefig outputs blank image

我正在尝试使用matplotlib保存我制作的绘图;但是,图像是空白的。

这是我的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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)

Tessttyy.png为空(也尝试使用.jpg)


第一,当T0 is not None什么发生?我会,我会测试,宏通plt.subplot()to the values,也许尝试131 132 133,布尔值,值,或depend whether or not that exists T0。P></

第二,在plt.show()is called,在人物is created。with this to You can协议,P></

  • plt.savefig('tessstttyyy.png', dpi=100)之前你plt.show()呼叫呼叫P></

  • 拯救人物打电话之前你show()模式"plt.gcf()for get current人物",那么你可以呼叫savefig()对象在任何时间Figureon this。P></

  • for example:P></

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

    在你的代码,因为它是空白tesssttyyy.png is is saving the new to which has been什么人物,plotted。P></


    如何在plt.savefig()plt.show()shouldP></


    我给更多的细节我们的实例:P></

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    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 hereP></