Ambiente: Python 2.7, matplotlib 1.3, IPython notebook 1.1, linux, chrome. Il codice è in una singola cella di input, utilizzando--pylab=inline
Voglio usare notebook e panda IPython per consumare un flusso e aggiornare dinamicamente un grafico ogni 5 secondi.
Quando uso l'istruzione print per stampare i dati in formato testo, funziona perfettamente: la cella di output continua a stampare i dati e ad aggiungere nuove righe. Ma quando provo a tracciare i dati (e quindi ad aggiornarli in un ciclo), il grafico non viene mai visualizzato nella cella di output. Ma se rimuovo il ciclo, lo stampo una volta. Funziona bene.
Poi ho fatto qualche semplice test:
i = pd.date_range('2013-1-1',periods=100,freq='s')
while True:
plot(pd.Series(data=np.random.randn(100), index=i))
#pd.Series(data=np.random.randn(100), index=i).plot() also tried this one
time.sleep(5)
L'output non mostrerà nulla finché non interrompo manualmente il processo (ctrl + m + i). E dopo averlo interrotto, la trama viene visualizzata correttamente come più linee sovrapposte. Ma quello che voglio veramente è una trama che si presenti e venga aggiornata ogni 5 secondi (o ogni volta che la plot()
funzione viene chiamata, proprio come l'istruzione print che ho citato sopra, che funziona bene). Mostrare solo il grafico finale dopo che la cella è stata completata NON è quello che voglio.
Ho anche provato ad aggiungere esplicitamente la funzione draw () dopo ciascuna plot()
, ecc. Nessuna di esse funziona. Mi chiedo come aggiornare dinamicamente un grafico tramite un ciclo for / while all'interno di una cella nel notebook IPython.