2011-12-06 12 views
7

Ho uno script python che legge in un file di dati e visualizza una figura con quattro grafici usando la libreria matplotlib. Il file di dati viene aggiornato ogni pochi secondi, poiché è un file di output per un diverso software che viene eseguito contemporaneamente. Vorrei che i quattro grafici nella mia figura matplotlib si aggiornassero utilizzando il file di dati aggiornato ogni 20 secondi. Il modo in cui ho implementato questo è il seguente:Come posso aggiornare dinamicamente la mia figura matplotlib mentre il file di dati cambia?

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) 

Questo funziona, ma perdo la funzionalità dei pulsanti di zoom e pan che normalmente funziona se pl.show() viene chiamato. Questo non è ottimale. Tuttavia, se pl.show() è sostituito da pl.draw(), lo script non aggiorna più i grafici. C'è un modo per aggiornare dinamicamente un grafico senza perdere completamente la funzionalità zoom/panoramica?

risposta

1

È necessario utilizzare un timer. Il metodo di timing che utilizzi dipenderà dal backend della GUI che stai utilizzando per matplotlib.

Here si ha un esempio con wx che utilizza la classe wx.Timer.

Esistono altri esempi di grafici dinamici nel sito matplotlib.

0

Il tuo codice è un po 'troppo vago per sapere cosa sta succedendo.

Posso offrire questo: È necessario mantenere la normale funzionalità se si creano le sottotrotografie una volta, salvando tutti gli oggetti degli assi e quindi chiamando show().

ulteriori modifiche di tali sottotrame potrebbe essere fatto in questo modo:

#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 degli strumenti per lo zoom e panning possono essere aggiunti a mano se lo si desidera.

Problemi correlati