Plot ipython笔记本中的动画图形

Plot ipython笔记本中的动画图形,plot,ipython,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() 更新日期:2014年1月 Jake Vanderplas为matplotlib动画创建了一个基于Javascript的包

是否有一种创建动画图形的方法。例如,使用不同的参数显示相同的图形

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

更新日期: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()

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

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

如果您使用IPython笔记本,v2.0及以上版本支持。您可以找到一个很好的示例笔记本(注意,您需要从自己的机器下载并运行才能看到滑块)

它本质上归结为导入
interact
,然后向其传递一个函数以及参数的范围。e、 例如,从第二个链接:

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));
这将生成一个带有两个滑块的绘图,分别为
f
a

让您使用笔记本中的GUI对象操作内核中的Python对象。你可能也喜欢鼠尾草。在笔记本电脑中共享小部件或互动可能会遇到的一个问题是,如果其他人没有IPython,他们就无法运行您的工作。为了解决这个问题,您可以使用Domino与其他人可以运行的小部件结合使用

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














如果希望实时流数据或将模拟设置为循环运行,也可以在笔记本中进行绘图。免责声明:我为Plotly工作。

在@goger关于“可怕的闪烁”的评论中,我发现调用clear_output(wait=True)解决了我的问题。该标志告诉clear_output等待渲染,直到它有新的东西要渲染。

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


如果您想要3D散点图动画,Ipyvolume Jupyter小部件非常令人印象深刻。

matplotlib
有一个模块可以实现这一点。但是,网站上提供的示例不会像笔记本中那样运行;你需要做一些调整,使其工作

下面是修改为在笔记本中使用的页面示例(粗体修改)


将numpy作为np导入
将matplotlib.pyplot作为plt导入
从matplotlib.animation导入FuncAnimation
从matplotlib导入rc
从IPython.display导入HTML
图,ax=plt.子批次()
扩展数据,ydata=[],[]
ln,=plt.plot([],[],'ro',动画=True)
def init():
ax.set_xlim(0,2*np.pi)
ax.set_ylim(-1,1)
返回ln,
def更新(帧):
扩展数据追加(帧)
附加(np.sin(frame))
ln.set_数据(扩展数据、ydata)
返回ln,
ani=FuncAnimation(图,更新,帧=np.linspace(0,2*np.pi,128),
init_func=init,blit=True)
rc('animation',html='html5')
安尼
#plt.show()#不再需要

请注意,笔记本中的动画是通过电影制作的,您需要安装ffmpeg并配置matplotlib才能使用它。

您是否也可以添加一个合理的x值?我用一个简单的范围(100)和numpy.arange(0,2*pi,0.01)尝试了您的示例,但这两种方法都不能产生很好的输出。另外,您似乎缺少了一些运行此代码的导入,因为这句话是几年后说的:为了避免闪烁的设置
clear\u输出(True)
(IPython 2.0.0),我正在尝试在IPython笔记本中设置不同类型的动画,这似乎是我迄今为止找到的最佳解决方案。有没有一种方法可以让它自动设置动画,这样用户就不需要操纵滑块了?我不认为这样做很简单。但请看一下“事件”页面:这里有一个使用回调以编程方式控制小部件的示例。因此,理论上,你可以有一个按钮,点击它就可以运行一个
for
循环来调整滑块/控件,并在两者之间休眠。这将产生有人手动“滑动”控件的效果。但这并不理想。