在ipython笔记本中的动画图形

时间:2012-07-23 11:32:46

标签: plot 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()

8 个答案:

答案 0 :(得分: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()

答案 1 :(得分:7)

更新:2014年1月

Jake Vanderplas为matplotlib动画创建了一个基于Javascript的包here。使用它就像:

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

Example of Jake's JSAnimation package

有关更完整的说明和示例,请参阅his blog post历史回答(请参阅更正),

是的,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()

答案 2 :(得分:5)

如果您使用IPython笔记本,则v2.0及更高版本支持interactive widgets。您可以找到一个很好的示例笔记本here(例如,您需要从自己的计算机上下载并运行以查看滑块)。

它基本上归结为导入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

答案 3 :(得分:5)

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

下面是三个可以在Notebook中构建的小部件示例,它们使用pandas过滤数据,分形和3D绘图的滑块。了解详情并查看代码和笔记本here




enter image description here




enter image description here




enter image description here




如果您想要直播数据或设置模拟以循环方式运行,您还可以stream data进入Notebook中的绘图。免责声明:我为Plotly工作。

答案 4 :(得分:1)

bqplot现在是一个非常好的选择。它专门为笔记本中的python构建了动画

https://github.com/bloomberg/bqplot

答案 5 :(得分:1)

如果您想要3D散点图动画,Ipyvolume Jupyter小部件非常令人印象深刻。 http://ipyvolume.readthedocs.io/en/latest/animation.html#

答案 6 :(得分:0)

关于@gugger对可怕的闪烁的评论',我发现调用clear_output(wait = True)解决了我的问题。该标志告诉clear_output等待呈现,直到它有新的东西呈现。

答案 7 :(得分: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才能使用它。