Trazando un flujo continuo de datos con MatPlotLib

Quiero usar MatPlotLib para trazar una gráfica, donde la ttwig cambia con el tiempo. En cada paso de tiempo, se agregará un punto de datos adicional a la gráfica. Sin embargo, solo debe mostrarse un gráfico, cuya apariencia evolucione con el tiempo.

En mi ejemplo de prueba, la gráfica es una gráfica lineal simple (y = x). Esto es lo que he intentado:

for i in range(100): x = range(i) y = range(i) plt.plot(x, y) plt.ion() plt.show() time.sleep(1) 

Sin embargo, lo que sucede aquí es que se crean múltiples ventanas, de modo que al final del ciclo tengo 100 ventanas. Además, he notado que para la ventana más reciente, es solo una ventana blanca, y la ttwig solo aparece en el siguiente paso.

Entonces, mis dos preguntas son:

1) ¿Cómo puedo cambiar mi código para que solo se muestre una sola ventana, cuyo contenido cambia con el tiempo?

2) ¿Cómo puedo cambiar mi código para que, en el paso de tiempo más reciente, la ttwig se muestre realmente en la ventana, en lugar de que solo muestre una ventana blanca?

¡Gracias!

(1)

Puede configurar plt.ion() al principio y trazar todos los gráficos en la misma ventana. Dentro del bucle, use plt.draw() para mostrar el gráfico y plt.pause(t) para hacer una pausa. Tenga en cuenta que t puede ser muy pequeño, pero el comando debe estar allí para que la animación funcione en la mayoría de los backends.
Es posible que desee borrar los ejes antes de trazar nuevo contenido utilizando plt.gca().cla() .

 import matplotlib.pyplot as plt plt.ion() for i in range(100): x = range(i) y = range(i) # plt.gca().cla() # optionally clear axes plt.plot(x, y) plt.title(str(i)) plt.draw() plt.pause(0.1) plt.show(block=True) # block=True lets the window stay open at the end of the animation. 

Como alternativa a este enfoque muy simple, use cualquiera de los ejemplos de animaciones que se proporcionan en http://matplotlib.org/examples/animation/index.html

(2)

Para obtener cada gráfico en una nueva ventana, use plt.figure() y elimine plt.ion() . También solo se muestran las ventanas al final:

 import matplotlib.pyplot as plt for i in range(100): x = range(i) y = range(i) plt.figure() plt.plot(x, y) plt.title(str(i)) plt.show() 

Tenga en cuenta que es posible que en ambos casos la primera gráfica esté vacía simplemente porque para i=0 , el range(i) == [] es una lista vacía sin ningún punto. Incluso para i=1 solo se ha trazado un punto, pero, por supuesto, ninguna línea puede conectar un solo punto consigo mismo.