2012-07-23 230 views
18

是否有创建动画图形的方法。例如显示具有不同参数的同一图表。ipython笔记本中的动画图形

例如是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() 

回答

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)的示例,但都没有创建出好的输出。此外,似乎你错过了一些进口来运行这个代码,因为这是 – 2013-03-05 19:25:24

+0

这个评论是在几年后:**以避免闪烁**设置'clear_output(True)'(IPython 2.0.0) – 2014-03-02 00:53:00

+0

Thanks @eldad!我应该再次更新:) – 2014-03-02 03:52:57

9

这有可怕的闪烁,但至少这创造了一个情节,为我的动画。它基于阿隆的,但阿隆的不工作。

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,然后传递一个函数,以及参数的范围。例如,从第二链路:

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

+0

我试图在iPython笔记本中创建不同类型的事情,这看起来像我迄今发现的最佳解决方案。有没有办法让它自动生成动画,以便用户不需要操纵滑块? – Addem 2016-02-21 04:16:50

+0

我不认为这样做是微不足道的。但是看看'events'的页面:有一个使用回调来编程控制小部件的例子。所以从理论上讲,你可以有一个按钮,点击时会运行一个'for'循环来调整滑块/控件,然后在两者之间休息。这将会有人“手动”滑动控制的效果。但这并不理想。 – Luciano 2016-03-07 11:07:18

5

IPython widgets让你使用笔记本中的GUI对象来操作内核中的Python对象。你可能也喜欢Sage hosted IPython Notebooks。在笔记本中共享小部件或交互性可能会遇到的一个问题是,如果其他人没有IPython,他们将无法运行您的工作。为了解决这个问题,你可以使用Domino到share Notebooks以及其他人可以运行的小部件。

下面是三个可以在笔记本中使用熊猫过滤数据,分形和3D滑块滑块的小部件示例。了解更多信息并查看代码和笔记本here




enter image description here




enter image description here




enter image description here




如果你想生活流数据或设置模拟为一个循环运行,也可以stream data成一个笔记本地块。免责声明:我为Plotly工作。

0

On @ goger对'可怕的闪烁'的评论,我发现调用clear_output(wait = True)解决了我的问题。该标志告诉clear_output等待渲染,直到它具有新的渲染。

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配置为用它制成。