Nas respostas sobre como atualizar dinamicamente um gráfico em um loop no notebook ipython (dentro de uma célula) , é dado um exemplo de como atualizar dinamicamente um gráfico dentro de um notebook Jupyter dentro de um loop Python. No entanto, isso funciona destruindo e recriando o enredo em cada iteração, e um comentário em um dos tópicos observa que esta situação pode ser melhorada usando a %matplotlib nbagg
magia nova , que fornece uma figura interativa embutida no caderno, ao invés do que uma imagem estática.
No entanto, esse novo nbagg
recurso maravilhoso parece ser completamente indocumentado, pelo que posso dizer, e não consigo encontrar um exemplo de como usá-lo para atualizar um enredo dinamicamente. Portanto, minha pergunta é: como atualizar com eficiência um gráfico existente em um notebook Jupyter / Python, usando o back-end nbagg? Visto que atualizar gráficos dinamicamente em matplotlib é uma questão complicada em geral, um exemplo simples de trabalho seria de grande ajuda. Uma indicação para qualquer documentação sobre o tópico também seria extremamente útil.
Para deixar claro o que estou pedindo: o que eu quero fazer é executar algum código de simulação para algumas iterações, em seguida, desenhar um gráfico de seu estado atual, executá-lo para mais algumas iterações e atualizar o gráfico para refletir o estado atual e assim por diante. Então a ideia é desenhar um enredo e depois, sem nenhuma interação do usuário, atualizar os dados do enredo sem destruir e recriar tudo.
Aqui está um código ligeiramente modificado da resposta à pergunta vinculada acima, que consegue isso redesenhando a figura inteira todas as vezes. Quero obter o mesmo resultado, mas com mais eficiência usando nbagg
.
%matplotlib inline
import time
import pylab as pl
from IPython import display
for i in range(10):
pl.clf()
pl.plot(pl.randn(100))
display.display(pl.gcf())
display.clear_output(wait=True)
time.sleep(1.0)
while True:
para um loop for, quando o loop terminar, obtenho duas imagens estáticas do último enredo, em vez de um nbagg interativo. Alguma ideia do porquê?