web-dev-qa-db-ja.com

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でも試してみました)

125
tylerthemiler

まず、T0 is not Noneの場合はどうなりますか?それをテストしてから、plt.subplot()に渡す値を調整します。値131、132、および133、またはT0が存在するかどうかに依存する値を試してください。

次に、plt.show()が呼び出された後、新しいFigureが作成されます。これに対処するには、次のことができます

  1. plt.savefig('tessstttyyy.png', dpi=100)を呼び出す前にplt.show()を呼び出します

  2. 「現在の図を取得する」ためにshow()を呼び出すことにより、plt.gcf()の前に図を保存し、このFigureオブジェクトでsavefig()をいつでも呼び出すことができます。

例えば:

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

あなたのコードでは、 'tesssttyyy.png'は何もプロットされていない新しい図を保存しているため、空白です。

207
Yann

plt.show()plt.savefig()の後に来る必要があります

64
JAG2024

関数の順序を変更問題を修正私にとって:

  • 最初の保存プロット
  • その後表示プロット

次のように:

plt.savefig('heatmap.png')

plt.show()
0
Behzad Sezar

より詳細な例を挙げましょう。

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 __== '__main__':
    test_draw()

enter image description here

0
Jayhello