2012-01-26 28 views
55

Estoy tratando de guardar las gráficas que hago usando matplotlib; sin embargo, las imágenes se guardan en blanco.Matplotlib (pyplot) savefig muestra la imagen en blanco

Aquí está mi código:

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) 

Y tessstttyyy.png está en blanco (también tratado con .jpg)

Respuesta

107

En primer lugar, ¿qué sucede cuando T0 is not None? Yo probaría eso, luego ajustaría los valores que paso a plt.subplot(); quizás intente con los valores 131, 132 y 133, o valores que dependen de si existe T0 o no.

En segundo lugar, después de que se llama plt.show(), se crea una nueva figura. Para hacer frente a esto, se puede

  1. llamada plt.savefig('tessstttyyy.png', dpi=100) antes de llamar a plt.show()

  2. Guarde la cifra antes show() llamando plt.gcf() para "obtener cifra actual", entonces se puede llamar savefig() en este objeto Figure en cualquier momento.

Por ejemplo:

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

En su código, 'tesssttyyy.png' está en blanco, ya que es el ahorro de la nueva figura, a la que nada se ha trazado.

+0

se olvidó de quitar la parte T0 ... se comentó anteriormente. – tylerthemiler

+1

Sí, eliminé el programa por completo y funcionó, eso tiene sentido ... – tylerthemiler

+1

Esto es genial, funciona como un amuleto – denvar

11

plt.show() debe venir después de plt.savefig()

Cuestiones relacionadas