2012-07-23 29 views
18

アニメーショングラフを作成する方法はありますか?たとえば、異なるパラメータを使用して同じグラフを表示します。例えばipythonノートブックのアニメーショングラフ

はSAGEのノートブックで、1は書くことができます。

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

答えて

7

更新:2014年1月

ジェイクVanderplasはhere利用可能matplotlibのアニメーションのためのJavaScriptベースのパッケージを作成しました。それを使用することと同じくらい簡単です:

# https://github.com/jakevdp/JSAnimation 
from JSAnimation import examples 
examples.basic_animation() 

Example of Jake's JSAnimation package

より完全な説明と例についてhis blog postを参照してください。 歴史的な答え(補正用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() 
+0

おそらく賢明なx値を追加できますか?単純な範囲(100)とnumpy.arange(0,2 * pi、0.01)であなたの例を試しましたが、どちらも素晴らしい出力を生成しません。また、このコードを実行するためにいくつかのインポートが欠落しているようです。 –

+0

この発言は少し後であります。**ちらつきを避けるため** set clear_output(True) '(IPython 2.0.0) –

+0

ありがとう@eldad!私はこれをもう一度更新する必要があります:) –

9

これは恐ろしいちらつきですが、少なくともこれは私のためにアニメーション化するプロットを作成します。これはAron'sに基づいていますが、Aron'sはそのまま動作しません。

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

あなたはIPythonのノートブック、V2.0およびサポートinteractive widgetsの上を使用している場合。あなたは良い例のノートブックhereを見つけることができます(n.b.あなたは自分のマシンからスライダーを見るためにダウンロードして実行する必要があります)。

本質的には、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)); 

これはfaために、2つのスライダとのプロットを生成します。

+0

私はiPythonノートブックで別のものをアニメーションしようとしています、これは私がこれまでに見つけた最高のソリューションについてのようです。ユーザーがスライダを操作する必要がないように自動的にアニメーション化する方法はありますか? – Addem

+0

私はこれを行うことは自明ではないと思います。しかし、「イベント」のページを見てください:プログラムでウィジェットを制御し、コールバックを使用する例があります。理論的には、ボタンをクリックするだけで、クリックするとスライダ/コントロールを調整する 'for'ループが実行され、その間に眠ります。それは、誰かが手動でコントロールをスライドさせるという効果があります。しかしそれは理想的ではありません。 – Luciano

5

IPython widgetsノートブックのGUIオブジェクトを使用してカーネル内のPythonオブジェクトを操作できます。 Sage hosted IPython Notebooksのようなものもあります。ノートブックでウィジェットやインタラクティブ機能を共有する際に起こりうる1つの問題は、他の誰かがIPythonを持っていないと自分の仕事を実行できないということです。これを解決するには、Lotus Dominoをshare Notebooksに、他の人が実行できるウィジェットを使用することができます。

以下は、パンダを使用してデータ、フラクタル、および3Dプロットのスライダをフィルタリングするノートブックで構築できるウィジェットの3つの例です。詳しくはコードとノートブックhereをご覧ください。




enter image description here




enter image description here




enter image description here




あなたは、データ・ストリームに暮らしたいか、またstream dataノートブックのプロットに、ループとして実行するためのシミュレーションをすることができます設定した場合。免責事項:私はPlotlyで働いています。

0

@ gogerの「恐ろしいちらつき」のコメントでは、clear_output(wait = True)を呼び出すと問題が解決されたことがわかりました。このフラグはclear_outputにレンダリングするのを待つように指示します。

1

これを行うには、bqplotが本当に良いオプションです。あなたは、3D散布図のアニメーションをしたい場合は、そのノートブック

https://github.com/bloomberg/bqplot

0

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のために必要と判断されることに注意してください。