アニメーショングラフを作成する方法はありますか?たとえば、同じグラフを異なるパラメータで表示します。
たとえば、SAGEノートブックの場合、次のように書くことができます。
a = animate([circle((i,i), 1-1/(i+1), hue=i/10) for i in srange(0,2,0.2)],
xmin=0,ymin=0,xmax=2,ymax=2,figsize=[2,2])
a.show()
これにはひどいちらつきがありますが、少なくともこれは私のためにアニメートするプロットを作成します。これはAronに基づいていますが、Aronはそのままでは機能しません。
import time, sys
from IPython.core.display import clear_output
f, ax = plt.subplots()
n = 30
x = array([i/10.0 for i in range(n)])
y = array([sin(i) for i in x])
for i in range(5,n):
ax.plot(x[:i],y[:i])
time.sleep(0.1)
clear_output()
display(f)
ax.cla() # turn this off if you'd like to "build up" plots
plt.close()
更新:2014年1月
Jake Vanderplasは、ここで入手できるmatplotlibアニメーション用のJavascriptベースのパッケージを作成しました。それを使用するのは簡単です:
# https://github.com/jakevdp/JSAnimation
from JSAnimation import examples
examples.basic_animation()
より完全な説明と例については、 彼のブログ投稿を参照してください。歴史的な答え(訂正についてはgogerを参照してください)
はい、Javascriptアップデートはまだ画像フレームを正しく保持していないため、ちらつきがありますが、この手法を使用して非常に簡単なことを行うことができます。
import time, sys
from IPython.display import clear_output
f, ax = plt.subplots()
for i in range(10):
y = i/10*sin(x)
ax.plot(x,y)
time.sleep(0.5)
clear_output()
display(f)
ax.cla() # turn this off if you'd like to "build up" plots
plt.close()
IPythonウィジェットを使用すると、ノートブックのGUIオブジェクトを使用してカーネルのPythonオブジェクトを操作できます。SageがホストするIPythonNotebookもお勧めです。ノートブックでウィジェットや双方向性を共有する際に発生する可能性のある問題の1つは、他の誰かがIPythonを持っていない場合、その人はあなたの作業を実行できないことです。これを解決するには、Dominoを使用して、他のユーザーが実行できるウィジェットとノートブックを共有できます。
以下は、パンダを使用してデータ、フラクタル、および3Dプロットのスライダーをフィルター処理するためにノートブックに作成できるウィジェットの3つの例です。詳細については、こちらのコードとノートブックをご覧ください。
データをライブストリーミングしたり、ループとして実行するシミュレーションを設定したりする場合は、ノートブックのプロットにデータをストリーミングすることもできます。免責事項:私はPlotlyで働いています。
IPython Notebookを使用する場合、v2.0以降はインタラクティブウィジェットをサポートします。ここに良い例のノートブックがあります(スライダーを表示するには、自分のマシンからダウンロードして実行する必要があります)。
基本的には、をインポートしてからinteract
、パラメータの範囲とともに関数を渡すことになります。たとえば、2番目のリンクから:
In [8]:
def pltsin(f, a):
plot(x,a*sin(2*pi*x*f))
ylim(-10,10)
In [9]:
interact(pltsin, f=(1,10,0.1), a=(1,10,1));
これにより、との2つのスライダーを持つプロットが生成されf
ますa
。
3D散布図アニメーションが必要な場合は、IpyvolumeJupyterウィジェットが非常に印象的です。 http://ipyvolume.readthedocs.io/en/latest/animation.html#
bqplotは、これを実行するための非常に優れたオプションです。ノートブックのPythonを介したアニメーション用に特別に構築されています
@gogerの「ひどいちらつき」のコメントで、clear_output(wait = True)を呼び出すと問題が解決することがわかりました。フラグは、clear_outputに、レンダリングする新しいものができるまでレンダリングを待機するように指示します。
matplotlib
それを行うためのanimation
モジュールがあります。ただし、サイトで提供されている例は、ノートブックのようには実行されません。それを機能させるには、いくつかの調整を行う必要があります。
これは、ノートブックで機能するように変更された以下のページの例です(太字の変更)。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from matplotlib import rc
from IPython.display import HTML
fig, ax = plt.subplots()
xdata, ydata = [], []
ln, = plt.plot([], [], 'ro', animated=True)
def init():
ax.set_xlim(0, 2*np.pi)
ax.set_ylim(-1, 1)
return ln,
def update(frame):
xdata.append(frame)
ydata.append(np.sin(frame))
ln.set_data(xdata, ydata)
return ln,
ani = FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 128),
init_func=init, blit=True)
rc('animation', html='html5')
ani
# plt.show() # not needed anymore
ノートブックのアニメーションはムービーを介して作成されており、ffmpegをインストールし、それを使用するようにmatplotlibを構成する必要があることに注意してください。