La animación de matplotlib en el cuaderno de Jupyter crea un gráfico vacío adicional

Empecé a crear una serie de cuadernos interactivos para una conferencia de DSP. Hasta ahora, he logrado copiar e implementar el MWE pegado a continuación. Sin embargo, además de la figura de matplotlib que contiene la animación, siempre obtengo una ventana de Matplotlib vacía. ¿Alguna idea de cómo suprimir este comportamiento?

python: 3.6.3 matplotlib: 2.0 y 2.1 IPython: 5.3.0 OS: Win 7 64 bit

%matplotlib inline import numpy as np import matplotlib.pyplot as plt from matplotlib import animation from IPython.display import HTML plt.rcParams['figure.figsize'] = (5,3) plt.rcParams['figure.dpi'] = 100 plt.rcParams['savefig.dpi'] = 100 plt.rcParams["animation.html"] = "jshtml" # for matplotlib 2.1 and above, uses JavaScript #plt.rcParams["animation.html"] = "html5" # for matplotlib 2.0 and below, converts to x264 using ffmpeg video codec t = np.linspace(0,2*np.pi) x = np.sin(t) fig, ax = plt.subplots() ax.axis([0,2*np.pi,-1,1]) l, = ax.plot([],[]) def animate(i): l.set_data(t[:i], x[:i]) ani = animation.FuncAnimation(fig, animate, frames=len(t)) ani 

El cuaderno también se puede ver en:

https://github.com/chipmuenk/dsp_fpga/blob/master/notebooks/01_LTI/MWE_animation.ipynb

En la representación estática en github, solo se muestra la ventana de trazado vacía, no la animación de JavaScript.

Esto no tiene nada que ver con una animación.

Las líneas

 %matplotlib inline import matplotlib.pyplot as plt fig, ax = plt.subplots() 

Creará una salida con una figura vacía.

Puede evitar la salida de una celda en una notebook jupyter utilizando la %%capture .

Celda 1:

 %%capture %matplotlib inline import matplotlib.pyplot as plt import matplotlib.animation plt.rcParams["animation.html"] = "jshtml" import numpy as np t = np.linspace(0,2*np.pi) x = np.sin(t) fig, ax = plt.subplots() h = ax.axis([0,2*np.pi,-1,1]) l, = ax.plot([],[]) def animate(i): l.set_data(t[:i], x[:i]) ani = matplotlib.animation.FuncAnimation(fig, animate, frames=len(t)) 

Cell2:

 ani 

introduzca la descripción de la imagen aquí

Aquí hay un ejemplo alternativo:

 %matplotlib inline from matplotlib import animation, pyplot as plt import numpy as np plt.rc('animation', html='html5') data = np.random.random(20) fig = plt.figure() ax = fig.add_subplot(111) ax.plot(data) # draw background anim = animation.ArtistAnimation(fig, [[ax.scatter(x, y)] for x, y in enumerate(data)]) anim 

El resultado ( anim ) se muestra animado, pero el efecto secundario potencial es una visualización adicional del marco estático. Este efecto secundario se desvanece si la llamada plt.figure produce en una celda separada antes del método add_subplot .

Esto funciona porque (como dijo ImportanceOfBeingErnest) la creación de una nueva figura provoca el efecto secundario de mostrar una imagen estática (que muestra cómo se dejó la figura al final de la evaluación de la celda actual en el cuaderno). Pero si aún no se ha completado nada en la figura (ni siquiera los ejes), evitas que se muestre cualquier imagen (sin necesidad de magia de Jupyter para suprimirla).