Ambiente: Python 2.7, matplotlib 1.3, IPython notebook 1.1, linux, chrome. O código está em uma única célula de entrada, usando--pylab=inline
Quero usar notebook IPython e pandas para consumir um stream e atualizar dinamicamente um gráfico a cada 5 segundos.
Quando eu apenas uso a instrução print para imprimir os dados em formato de texto, funciona perfeitamente bem: a célula de saída apenas continua imprimindo dados e adicionando novas linhas. Mas quando tento plotar os dados (e depois atualizá-los em um loop), o gráfico nunca aparece na célula de saída. Mas se eu remover o loop, plote-o apenas uma vez. Funciona bem.
Então fiz um teste simples:
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)
A saída não mostrará nada até que eu interrompa manualmente o processo (ctrl + m + i). E depois de interrompê-lo, o gráfico mostra corretamente como várias linhas sobrepostas. Mas o que eu realmente quero é um gráfico que apareça e seja atualizado a cada 5 segundos (ou sempre que a plot()
função for chamada, assim como as saídas da instrução de impressão que mencionei acima, que funciona bem). Mostrar apenas o gráfico final depois que a célula está completamente pronta NÃO é o que eu quero.
Eu até tentei adicionar explicitamente a função draw () após cada uma plot()
, etc. Nenhuma delas funciona. Gostaria de saber como atualizar dinamicamente um gráfico por um loop for / while dentro de uma célula no notebook IPython.