web-dev-qa-db-ja.com

Jupyterのインラインアニメーション

pythonアニメーションスクリプト(matplotlibのfuncAnimationを使用)があります。これは、Spyderで実行されますが、Jupyterでは実行されません。 「%matplotlib inline」を追加したり、matplotlibバックエンドを「Qt4agg」に変更するなど、さまざまな提案に従ってみましたが、すべて成功しませんでした。また、いくつかのアニメーションのサンプル(Jupyterチュートリアルから)を実行してみましたが、どれも機能しませんでした。エラーメッセージが表示されたり、プロットが表示されることがありますが、アニメーション化されません。ちなみに、私はhave "%matplotlib inline"を使用して動作するようにpyplot.plot()を取得しました。

FuncAnimationを使用するSIMPLEインラインアニメーションの例を使用して、動作中のJupyterノートブックを知っている人はいますか。助けてくれてありがとう!

[注:Windows 7を使用しています]

28
Ari Herman

ノートブックバックエンド

「インライン」は、プロットがpngグラフィックとして表示されることを意味します。これらのpng画像はアニメーション化できません。原則として、PNG画像を連続的に置き換えることでアニメーションを作成できますが、これはおそらく望ましくありません。

解決策は、ノートブックバックエンドを使用することです。これは、matplotlibフィギュア自体をレンダリングするため、FuncAnimationと完全に互換性があります。

%matplotlib notebook

jsanimation

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())

ただし......

それを機能させるのに苦労しました。基本的に、問題は、上記でバックグラウンドでffmpegx264コーデックを使用する(デフォルトで)が、これらはマシン上で正しく構成されていないことでした。解決策は、それらをアンインストールし、正しい構成でソースから再構築することでした。詳細については、Andrew Heusserからの実際の答えで私が尋ねた質問を参照してください。 ipython(jupyter)ノートブックのアニメーション-ValueError:閉じたファイルのI/O操作

したがって、最初に上記のto_html5_videoソリューションを試してください。それが機能しない場合は、ffmpegおよびx264のアンインストール/再構築も試してください。

11
Biggsy

公式な例を含む複数の情報源からまとめた答えを以下に示します。 JupyterとPythonの最新バージョンでテストしました。

 
 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')
 
1
MosGeo