it-swarm.com.de

Matplotlib (pyplot) savefig gibt ein leeres Bild aus

Ich versuche, Pläne zu speichern, die ich mit Matplotlib erstellt habe; Die Bilder werden jedoch leer gespeichert.

Hier ist mein Code:

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)

Und tessstttyyy.png ist leer (auch versucht mit .jpg)

91
tylerthemiler

Was passiert zuerst, wenn T0 is not None? Ich würde das testen, dann würde ich die Werte anpassen, die ich an plt.subplot() übergebe. Versuchen Sie die Werte 131, 132 und 133 oder Werte, die davon abhängen, ob T0 vorhanden ist oder nicht.

Nach dem Aufruf von plt.show() wird eine neue Figur erstellt. Um damit fertig zu werden, können Sie

  1. Rufen Sie plt.savefig('tessstttyyy.png', dpi=100) an, bevor Sie plt.show() aufrufen.

  2. Speichern Sie die Abbildung vor Ihnen show(), indem Sie plt.gcf() für "get current figure" aufrufen. Sie können savefig() für dieses Figure-Objekt jederzeit aufrufen.

Zum Beispiel: 

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

In Ihrem Code ist 'tesssttyyy.png' leer, da die neue Figur gespeichert wird, für die nichts geplottet wurde. 

164
Yann

plt.show() sollte nach plt.savefig() kommen

46
JAG2024

ändere die Reihenfolge der Funktionen behobenes Problem für mich:

  • firstSave die Handlung
  • dannAnzeigen die Handlung

wie folgt:

plt.savefig('heatmap.png')

plt.show()
0
Behzad Sezar

lassen Sie mich ein detaillierteres Beispiel geben:

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