tylerthemiler
Estoy tratando de guardar parcelas que hago usando matplotlib; sin embargo, las imágenes se guardan 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 tesstttyyy.png está en blanco (también probado con .jpg)
En primer lugar, ¿qué sucede cuando T0 is not None
? Probaría eso, luego ajustaría los valores que paso a plt.subplot()
; tal vez pruebe los valores 131, 132 y 133, o valores que dependen de si o no T0
existe
En segundo lugar, después plt.show()
se llama, se crea una nueva figura. Para hacer frente a esto, puede
-
Llamar
plt.savefig('tessstttyyy.png', dpi=100)
antes de llamarplt.show()
-
Guarde la figura antes que usted
show()
llamandoplt.gcf()
para “obtener la cifra actual”, entonces puede llamarsavefig()
en esteFigure
objeto 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 porque está guardando la nueva figura, en la que no se ha trazado nada.
-
Olvidé quitar la parte T0… se comentó anteriormente.
– tylerthemiler
26 de enero de 2012 a las 1:18
-
Un caso especial de esto ocurre en
jupyter
cuadernos con%matplotlib inline
habilitado: elsavefig
la llamada debe estar en la misma celda que el método de creación de gráficos.– José
6 de enero de 2018 a las 1:31
-
interesante de ver
plt.show()
genera una nueva imagen. De hecho, esto resolvió el problema.– usuario989762
15 de agosto de 2018 a las 8:21
-
Curiosamente, si escribe plt.plot, plt.savefig, plt.show uno por uno en una terminal como spyder, no se mostrará fig. Coloque todos los comandos en un script y ejecútelos de una sola vez. Muestra la trama.
– CKM
9 de octubre de 2018 a las 6:57
-
@CKM Hola. ¿Sabes por qué sucede esto? Estaba pensando que en realidad es un problema que causa funciones como
plt.ylabel()
cree una nueva figura en lugar de aplicarla a la actual (publicada aquí), y también guarde las figuras en blanco. Tracé una figura y la guardé en la misma línea (separada por;
) Y funcionó. ¿Es esto solo un problema con Spyder?– La velocista
10 de julio de 2020 a las 14:20
JAG2024
plt.show()
debería venir después plt.savefig()
Explicación: plt.show()
borra todo, por lo que cualquier cosa después sucederá en una nueva figura vacía
cambiar el orden de las funciones arregló el problema para mí:
- primero Ahorrar la trama
- entonces Espectáculo la trama
de la siguiente manera:
plt.savefig('heatmap.png')
plt.show()
Krish
Llamar a savefig antes de show() funcionó para mí.
fig ,ax = plt.subplots(figsize = (4,4))
sns.barplot(x='sex', y='tip', color="g", ax=ax,data=tips)
sns.barplot(x='sex', y='tip', color="b", ax=ax,data=tips)
ax.legend(['Male','Female'], facecolor="w")
plt.savefig('figure.png')
plt.show()
déjame darte un ejemplo más detallado:
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 __name__ == '__main__':
test_draw()