J'essaie de sauvegarder des parcelles que je construis en utilisant matplotlib; Cependant, les images sont vierges.
Voici mon 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)
Et tessstttyyy.png est vide (également essayé avec .jpg)
Tout d’abord, que se passe-t-il quand T0 is not None
? Je testerais cela, puis j'ajusterais les valeurs que je transmets à plt.subplot()
; essayez peut-être les valeurs 131, 132 et 133, ou des valeurs qui dépendent de l'existence ou non de T0
.
Deuxièmement, après l'appel de plt.show()
, une nouvelle figure est créée. Pour faire face à cela, vous pouvez
Appelez plt.savefig('tessstttyyy.png', dpi=100)
avant d'appeler plt.show()
Enregistrez la figure devant vous _show()
en appelant plt.gcf()
pour obtenir la valeur actuelle, vous pourrez appeler savefig()
à tout moment sur cet objet Figure
.
Par exemple:
fig1 = plt.gcf()
plt.show()
plt.draw()
fig1.savefig('tessstttyyy.png', dpi=100)
Dans votre code, "tesssttyyy.png" est vide car il enregistre le nouveau chiffre auquel rien n'a été tracé.
plt.show()
devrait venir après plt.savefig()
changer l'ordre des fonctions corrigé le problème pour moi:
comme suit:
plt.savefig('heatmap.png')
plt.show()
donnons un exemple plus détaillé:
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()