pythonアニメーションスクリプト(matplotlibのfuncAnimationを使用)があります。これは、Spyderで実行されますが、Jupyterでは実行されません。 「%matplotlib inline」を追加したり、matplotlibバックエンドを「Qt4agg」に変更するなど、さまざまな提案に従ってみましたが、すべて成功しませんでした。また、いくつかのアニメーションのサンプル(Jupyterチュートリアルから)を実行してみましたが、どれも機能しませんでした。エラーメッセージが表示されたり、プロットが表示されることがありますが、アニメーション化されません。ちなみに、私はhave "%matplotlib inline"を使用して動作するようにpyplot.plot()を取得しました。
FuncAnimationを使用するSIMPLEインラインアニメーションの例を使用して、動作中のJupyterノートブックを知っている人はいますか。助けてくれてありがとう!
[注:Windows 7を使用しています]
「インライン」は、プロットがpngグラフィックとして表示されることを意味します。これらのpng画像はアニメーション化できません。原則として、PNG画像を連続的に置き換えることでアニメーションを作成できますが、これはおそらく望ましくありません。
解決策は、ノートブックバックエンドを使用することです。これは、matplotlibフィギュア自体をレンダリングするため、FuncAnimation
と完全に互換性があります。
%matplotlib notebook
Matplotlib 2.1以降では、JavaScriptを使用してアニメーションを作成できます。これはani.to_html5()
ソリューションに似ていますが、ビデオコーデックが不要です。
from IPython.display import HTML
HTML(ani.to_jshtml())
完全な例:
import matplotlib.pyplot as plt
import matplotlib.animation
import numpy as np
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 = matplotlib.animation.FuncAnimation(fig, animate, frames=len(t))
from IPython.display import HTML
HTML(ani.to_jshtml())
または、jsanimationをアニメーション表示のデフォルトにします。
plt.rcParams["animation.html"] = "jshtml"
最後に、単にani
と指定してアニメーションを取得します。
完全な概要については this answer も参照してください。
このチュートリアルには簡単な例があります: http://louistiao.me/posts/notebooks/embedding-matplotlib-animations-in-jupyter-notebooks/
上記のチュートリアルを要約するには、基本的に次のようなものが必要です。
from matplotlib import animation
from IPython.display import HTML
# <insert animation setup code here>
anim = animation.FuncAnimation() # With arguments of course!
HTML(anim.to_html5_video())
ただし......
それを機能させるのに苦労しました。基本的に、問題は、上記でバックグラウンドでffmpeg
とx264
コーデックを使用する(デフォルトで)が、これらはマシン上で正しく構成されていないことでした。解決策は、それらをアンインストールし、正しい構成でソースから再構築することでした。詳細については、Andrew Heusserからの実際の答えで私が尋ねた質問を参照してください。 ipython(jupyter)ノートブックのアニメーション-ValueError:閉じたファイルのI/O操作
したがって、最初に上記のto_html5_video
ソリューションを試してください。それが機能しない場合は、ffmpeg
およびx264
のアンインストール/再構築も試してください。
公式な例を含む複数の情報源からまとめた答えを以下に示します。 JupyterとPythonの最新バージョンでテストしました。
imageList
のみを変更する必要があります。これは画像のリストです(入力)。numpyをnpとしてインポート matplotlib.pyplotをpltとしてインポート インポートmatplotlib.animationをアニメーションとして。] #======================================== #Numpyを使用して偽の画像を作成 #独自のimageListがあるため、コードでこれを必要としません。 #これは例として使用されます。 imageList = [] x = np.linspace(0、2 * np.pi、120) y = np.linspace(0、2 * np.pi、100 ).reshape(-1、1) for i in range(60): x + = np.pi/15。 y + = np.pi/20。 imageList.append(np.sin(x)+ np.cos(y)) #================ ========================= #偽の画像をアニメートする(Jupyter) def getImageFromList (x): return imageList [x] fig = plt.figure(figsize =(10、10)) ims = [] for i in range(len(imageList)): im = plt.imshow(getImageFromList(i)、animated = True) ims.append([im]) ani = animation.ArtistAnimation(fig、ims 、interval = 50、blit = True、repeat_delay = 1000) plt.close() #アニメーションを表示 HTML(ani.to_html5_video()) #====================================== == #アニメーションをビデオとして保存(必要な場合) #ani.save( 'dynamic_images.mp4')