1. ホーム
  2. python

[解決済み] Matplotlib (pyplot) の savefig が空白の画像を出力する

2022-01-26 03:12:51

質問

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

解決方法は?

まず、以下の場合はどうなるのでしょうか? 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)

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