2012-08-01 276 views
6

He hecho una búsqueda en SO, pero no he encontrado la "solución" correcta para mi problema. Estoy ejecutando un ciclo sobre algunos datos que deseo trazar. En cada paso del ciclo, trazado la figura con plt.show(). Sin embargo, como se trata de una función de bloqueo, estoy atascado hasta que cierre manualmente la ventana y luego el ciclo continúa y aparece el siguiente gráfico.python y actualizar figura en matplotlib

Lo que me gustaría hacer es poder vincular un evento de pulsación de tecla para cerrar la figura y continuar el ciclo (en lugar de usar el mouse para "X" fuera de la figura).

Si esto no es posible, me gustaría configurar un temporizador para cerrar la figura y continuar el ciclo.

Todos mis problemas parecen tener que ver con el hecho de que plt.show() está bloqueando todo lo demás, ¿se puede evitar esto?

Algunas notas sobre mis gráficos: utilizan los mismos ejes, pero contienen un diagrama de dispersión, cuadros de relleno y anotaciones, que siempre están cambiando.

Gracias!

Respuesta

4

Intente utilizar ion de matplotlib.pyplot:

import matplotlib.pyplot as pp 
pp.ion() 
fig = pp.figure() 

Más información sobre ion e interactiva vs no interactiva uso here

Alternativamente, si usted quiere ir con el enfoque pulse el botón asignar una devolución de llamada

def moveon(event): 
    pp.close() 

cid = fig.canvas.mpl_connect('key_press_event', moveon) 
pp.show() 

Un temporizador de eventos es más complicado porque elEl comandoes bloqueante, por lo que probablemente deba involucrar el enhebrado.

+1

Esta es una gran respuesta. Además, puede ponerlo en una GUI con algo así como PyQT que le da más control y la capacidad de actualizar según sea necesario. – TimothyAWiseman

+0

Esto no funcionó para mí. Utilicé exactamente el mismo código que se proporciona y ocurren cosas extrañas. Lo que ocurrió fue que todas las figuras se abrieron consecutivamente (no presioné y botones) y no tenían nada en ellas. Además, apareció "No respondiendo" y apagó mi pitón. El pp.ion() parece causar los problemas. ¿¿Ayuda?? – mcfly

+0

@mcfly: Las opciones 'ion()' significan que la ejecución no se detendrá. Si desea reemplazar el trazado existente cada vez, solo llame a 'figure' una vez. – jmetz

Cuestiones relacionadas