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)

3 75

3 ответа:

во-первых, что происходит, когда T0 is not None? Я бы проверил это, а затем я бы скорректировал значения, которые я передаю в plt.subplot(); может быть, попробуйте значения 131, 132 и 133, или значения, которые зависят от того или нет .

во-вторых, после plt.show() создается новая фигура. Чтобы справиться с этим, вы можете

  1. вызов plt.savefig('tessstttyyy.png', dpi=100) прежде чем вы позвоните plt.show()

  2. сохраните рисунок перед вами show() по телефону plt.gcf() для "сделать текущим рисунок", то вы можете позвонить savefig() на

plt.show() после plt.savefig()

давайте я приведу более подробный пример:

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