2012-07-13 47 views
7

Tengo algunos problemas con matplotlib .... No puedo abrir 2 ventanas a la vez para mostrar una imagen con show(), parece que el script se detiene en el línea que uso mostrar y no continúa a menos que cierre la pantalla manualmente. ¿Hay alguna forma de cerrar la ventana de la figura dentro del scrip?usando show() y cerrar() desde matplotlib

el siguiente código no se ejecuta como yo quiero:

import matplotlib.pyplot as plt 
from time import sleep 
from scipy import eye 

plt.imshow(eye(3)) 
plt.show() 
sleep(1) 
plt.close() 
plt.imshow(eye(2)) 
plt.show() 

que espera que la primera ventana para cerrar después de 1 segundo y luego la apertura de la segunda, pero la ventana no se cierra hasta la cierro mí mismo. ¿Estoy haciendo algo mal, o es lo que se supone que es?

+0

Posible duplicado. Compruebe http://stackoverflow.com/q/9753885/302369 – imsc

+0

de hecho que resuelve este problema, pero obtengo otro ..... cuando uso plt.ion() No puedo usar algunos recursos como acercar la figura ventana (ni siquiera puedo mover la ventana) ... – xarles

Respuesta

11

plt.show() es una función de bloqueo .

Básicamente, si quiere abrir dos ventanas a la vez, necesita crear dos figuras, y luego usar plt.show() al final para mostrarlas. De hecho, una regla general es que configure sus parcelas, y plt.show() es lo último que hace.

Así, en su caso:

fig1 = plt.figure(figsize=plt.figaspect(0.75)) 
ax1 = fig1.add_subplot(1, 1, 1) 
im1, = plt.imshow(eye(3)) 

fig2 = plt.figure(figsize=plt.figaspect(0.75)) 
ax2 = fig2.add_subplot(1, 1, 1) 
im2, = plt.imshow(eye(2)) 

plt.show() 

Se puede cambiar entre las parcelas utilizando axes(ax2).

He reunido un ejemplo completo que demuestra por qué la función de trazado está bloqueando y cómo se puede utilizar en una respuesta a otra pregunta: https://stackoverflow.com/a/11141305/1427975.

+0

gracias, señor. Pero en mi guión, estoy tratando de demostrar como 100 tramas una por una. Probablemente no elegiría plt.show() todos ellos al final. Quiero mostrar una gráfica, pausada por quizás 1 segundo, luego cerrarla automáticamente en las secuencias de comandos en lugar de cerrarla manualmente, y luego mostrar repetidamente la siguiente, por 100 veces. ¿Hay alguna forma de hacerlo? Edición: Probé el plt.ion() encima de todo. Sí, las tramas aparecen y se cierran una a una. Sin embargo, no aparece nada en la ventana de la figura, todo en blanco. – StayFoolish

1

Uso PyScripter y Python 2.7 y también tuve el problema de plt.show() bloqueando todas las ejecuciones hasta que cierre manualmente las figuras.

Descubrí que cambiar el motor de Python a 'remote (Wx)' permite ejecutar el script después de plt.show(), por lo que podría cerrar las cifras con plt.close().