2011-12-06 13 views
7

Tengo un script de python que se lee en un archivo de datos y muestra una figura con cuatro gráficos utilizando la biblioteca matplotlib. El archivo de datos se actualiza cada pocos segundos, ya que es un archivo de salida para una pieza de software diferente que se ejecuta simultáneamente. Me gustaría que las cuatro representaciones de mi figura matplotlib se actualicen utilizando el archivo de datos actualizado cada 20 segundos. La forma en que he implementado este es el siguiente:¿Cómo puedo actualizar dinámicamente mi figura de matplotlib a medida que cambia el archivo de datos?

import pylab as pl 
import time 

pl.ion() 
fig = pl.figure() 
while True: 
    f = open('data.out', 'rb') 
    #code to parse data and plot four charts 
    ax = fig.add_subplot(2,2,1) 
    #... 
    ax = fig.add_subplot(2,2,4) 
    #... 
    pl.draw() 
    time.sleep(20) 

Esto funciona, pero perder la funcionalidad de los botones de zoom y desplazamiento que normalmente funciona si pl.show() se llama. Esto no es óptimo Sin embargo, si pl.show() se sustituye por pl.draw(), el script ya no actualiza los gráficos. ¿Hay alguna forma de actualizar dinámicamente una gráfica sin perder completamente la funcionalidad de zoom/pan?

Respuesta

1

Debe utilizar un temporizador. El método de tiempo que use dependerá del backend de GUI que esté utilizando para matplotlib.

Here tiene un ejemplo con wx que usa la clase wx.Timer.

Hay otros ejemplos de gráficos dinámicos en el sitio matplotlib.

0

Su código es un poco demasiado vago para saber qué está pasando.

Puedo ofrecer esto: Debe conservar la funcionalidad normal si crea sus subtramas una vez, guarda todos los objetos de los ejes y luego llama a show().

modificaciones ulteriores de estas subtramas se podría hacer así:

#inside while loop 
for i in #subplotlist 
    ax[i].clear() #ax[i] is the axis object of the i'th subplot 
    ax[i].plot(#plotstuff) 
    ax[i].draw() 

La barra de herramientas de zoom y panorámica se puede añadir manualmente si así lo desea.

Cuestiones relacionadas