tutorial notebook jupiter instalar como python matplotlib jupyter jupyter-notebook

notebook - jupyter python 3



¿Cuál es la forma correcta de actualizar dinámicamente las parcelas en Jupyter/iPython? (2)

En las respuestas a cómo actualizar dinámicamente un diagrama en un bucle en el cuaderno de ipython (dentro de una celda) , se da un ejemplo de cómo actualizar dinámicamente un diagrama dentro de un cuaderno de Jupyter en un bucle de Python. Sin embargo, esto funciona destruyendo y recreando la trama en cada iteración, y un comentario en uno de los hilos señala que esta situación puede mejorarse usando la magia new-ish %matplotlib nbagg , que proporciona una figura interactiva incrustada en el cuaderno, en lugar de una imagen estática.

Sin embargo, esta nueva característica maravillosa de nbagg parece estar completamente indocumentada hasta donde puedo decir, y no puedo encontrar un ejemplo de cómo usarla para actualizar dinámicamente una trama. Por lo tanto, mi pregunta es, ¿cómo se actualiza eficientemente una trama existente en un cuaderno Jupyter / Python, usando el backend nbagg? Dado que actualizar dinámicamente las parcelas en matplotlib es un problema complicado en general, un simple ejemplo de trabajo sería de gran ayuda. Un puntero a cualquier documentación sobre el tema también sería extremadamente útil.

Para que quede claro lo que estoy pidiendo: lo que quiero hacer es ejecutar algún código de simulación para algunas iteraciones, luego dibujar un gráfico de su estado actual, luego ejecutarlo para algunas iteraciones más, luego actualizar el gráfico para reflejar el estado actual, y así sucesivamente. Entonces, la idea es dibujar un diagrama y luego, sin ninguna interacción del usuario, actualizar los datos en el diagrama sin destruir y volver a crear todo.

Aquí hay un código ligeramente modificado de la respuesta a la pregunta vinculada anterior, que logra esto al volver a dibujar la figura completa cada vez. Quiero lograr el mismo resultado, pero de manera más eficiente 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)


Aquí hay un ejemplo que actualiza una trama en un bucle. Actualiza los datos de la figura y no vuelve a dibujar la figura completa cada vez. Bloquea la ejecución, aunque si está interesado en ejecutar un conjunto finito de simulaciones y guardar los resultados en algún lugar, puede que no sea un problema para usted.

%matplotlib notebook import numpy as np import matplotlib.pyplot as plt import time def pltsin(ax, colors=[''b'']): x = np.linspace(0,1,100) if ax.lines: for line in ax.lines: line.set_xdata(x) y = np.random.random(size=(100,1)) line.set_ydata(y) else: for color in colors: y = np.random.random(size=(100,1)) ax.plot(x, y, color) fig.canvas.draw() fig,ax = plt.subplots(1,1) ax.set_xlabel(''X'') ax.set_ylabel(''Y'') ax.set_xlim(0,1) ax.set_ylim(0,1) for f in range(5): pltsin(ax, [''b'', ''r'']) time.sleep(1)

Puse esto en nbviewer aquí.

Hay una versión de nbagg Widget de nbagg que actualmente está en progreso en el repositorio de Matplotlib . Cuando eso esté disponible, esa será probablemente la mejor manera de usar nbagg .

EDITAR: actualizado para mostrar múltiples parcelas


Estoy usando jupyter-lab y esto funciona para mí (adaptarlo a su caso):

from IPython.display import clear_output from matplotlib import pyplot as plt import collections %matplotlib inline def live_plot(data_dict, figsize=(7,5), title=''''): clear_output(wait=True) plt.figure(figsize=figsize) for label,data in data_dict.items(): plt.plot(data, label=label) plt.title(title) plt.grid(True) plt.xlabel(''epoch'') plt.legend(loc=''center left'') # the plot evolves to the right plt.show();

Luego, en un bucle, completa un diccionario y lo pasa a live_plot() :

data = collections.defaultdict(list) for i in range(100): data[''foo''].append(np.random.random()) data[''bar''].append(np.random.random()) data[''baz''].append(np.random.random()) live_plot(data)

asegúrese de tener algunas celdas debajo del gráfico, de lo contrario, la vista se ajusta en su lugar cada vez que se vuelve a dibujar el gráfico.