web-dev-qa-db-ja.com

JupyterノートブックのMatplotlibアニメーションは、追加の空のプロットを作成します

DSP講義用の一連のインタラクティブノートブックの作成を開始しました。これまでのところ、以下に貼り付けたMWEをコピーして実装することができました。ただし、アニメーションを含むmatplotlibの図に加えて、常に空のMatplotlibウィンドウが表示されます。この動作を抑制する方法はありますか?

python:3.6.3 matplotlib:2.0および2.1 IPython:5.3.0 OS:Win 764ビット

%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

ノートブックは、次の下でも表示できます。

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

Githubでの静的レンダリングでは、JavaScriptアニメーションではなく、空のプロットウィンドウのみが表示されます。

9
Chipmuenk

これはアニメーションとは何の関係もありません。

台詞

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

空の図で出力を作成します。

%%captureを使用して、jupyterノートブックのセルの出力を防ぐことができます。

Cell1:

%%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

enter image description here

別の例を次に示します。

%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

結果(anim)はアニメーションで表示されますが、潜在的な副作用は静的フレームの追加表示です。この副作用は、plt.figureメソッドの前の別のセルでadd_subplot呼び出しが発生した場合に消えます。

これが機能するのは、(ImportanceOfBeingErnestが言ったように)新しい図を作成すると、静止画像を表示するという副作用が発生するためです(ノートブックの現在のセル評価の終了時に図がどのように残されたかを示します)。ただし、フィギュアにまだ何も入力されていない場合(軸も)、画像が表示されないようにします(画像を抑制するためにjupyterマジックを必要としません)。

2
benjimin