有没有一种创建动画图表的方法。例如显示具有不同参数的相同图表。
比如是SAGE notebook,可以这样写:
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()
这有可怕的闪烁,但至少这为我创造了一个动画情节。它基于 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()
更新: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()
IPython 小部件让您可以使用 Notebook 中的 GUI 对象来操作内核中的 Python 对象。您可能还喜欢 Sage托管的 IPython Notebooks。在笔记本中共享小部件或交互性时可能遇到的一个问题是,如果其他人没有 IPython,他们将无法运行您的工作。为了解决这个问题,您可以使用 Domino与其他人可以运行的小部件共享笔记本。
下面是您可以在 Notebook 中构建的三个小部件示例,使用 pandas 过滤数据、分形和 3D 绘图的滑块。了解更多信息并在此处查看代码和笔记本。
如果您想要实时流式传输数据或设置模拟以循环运行,您还可以将数据流式传输到笔记本中的绘图中。免责声明:我为 Plotly 工作。
如果您使用 IPython notebook,v2.0 及以上版本支持交互式小部件。你可以在这里找到一个很好的示例笔记本(nb 你需要从你自己的机器上下载并运行才能看到滑块)。
它基本上归结为导入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));
这将产生一个带有两个滑块的图,forf
和a
。
如果您想要 3D 散点图动画,Ipyvolume Jupyter 小部件非常令人印象深刻。 http://ipyvolume.readthedocs.io/en/latest/animation.html#
bqplot 现在是一个非常好的选择。它专为通过笔记本中的 python 制作动画而构建
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 才能使用它。
在@goger 对“可怕的闪烁”的评论中,我发现调用 clear_output(wait=True) 解决了我的问题。该标志告诉 clear_output 等待渲染,直到它有新的渲染。