18

アニメーショングラフを作成する方法はありますか?たとえば、同じグラフを異なるパラメータで表示します。

たとえば、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()
4

8 に答える 8

9

これにはひどいちらつきがありますが、少なくともこれは私のためにアニメートするプロットを作成します。これは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()
于 2013-03-07T21:37:31.470 に答える
7

更新:2014年1月

Jake Vanderplasは、ここで入手できるmatplotlibアニメーション用のJavascriptベースのパッケージを作成しました。それを使用するのは簡単です:

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

JakeのJSAnimationパッケージの例

より完全な説明と例については、 彼のブログ投稿を参照してください。歴史的な答え(訂正については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()
于 2012-09-12T13:35:43.030 に答える
6

IPythonウィジェットを使用すると、ノートブックのGUIオブジェクトを使用してカーネルのPythonオブジェクトを操作できます。SageがホストするIPythonNotebookもお勧めです。ノートブックでウィジェットや双方向性を共有する際に発生する可能性のある問題の1つは、他の誰かがIPythonを持っていない場合、その人はあなたの作業を実行できないことです。これを解決するには、Dominoを使用して、他のユーザーが実行できるウィジェットとノートブックを共有できます。

以下は、パンダを使用してデータ、フラクタル、および3Dプロットのスライダーをフィルター処理するためにノートブックに作成できるウィジェットの3つの例です。詳細については、こちらのコードとノートブックをご覧ください。




ここに画像の説明を入力してください




ここに画像の説明を入力してください




ここに画像の説明を入力してください




データをライブストリーミングしたり、ループとして実行するシミュレーションを設定したりする場合は、ノートブックのプロットにデータをストリーミングすることもできます。免責事項:私はPlotlyで働いています。

于 2015-06-03T23:23:48.443 に答える
5

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

于 2014-08-14T12:53:38.940 に答える
2

3D散布図アニメーションが必要な場合は、IpyvolumeJupyterウィジェットが非常に印象的です。 http://ipyvolume.readthedocs.io/en/latest/animation.html#

于 2017-06-27T22:17:01.427 に答える
1

bqplotは、これを実行するための非常に優れたオプションです。ノートブックのPythonを介したアニメーション用に特別に構築されています

https://github.com/bloomberg/bqplot

于 2017-02-21T20:50:05.390 に答える
0

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

于 2015-12-04T03:32:12.167 に答える
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を構成する必要があることに注意してください。

于 2018-02-28T07:52:35.343 に答える