如何创建实时动态更新的无限乐趣动画帧?

How to create indefinite funcanimation frames dynamically updating in real time?

我正在尝试在 python

中重新创建 a population variance graph

在那个例子中,我们一启动,函数就立即运行到我猜网站设置的环境限制。

我已经设法创建了类似的图表,但是对于动画我卡住了。下面是我的代码。

import matplotlib.animation as animation

fig, ax = plt.subplots(1,1,figsize=(5,4))
plt.close()

frameRate = 30

global_counter = 0

def animate(i):

    ax.clear()

    global global_counter

    ax.text(0.5,0.5, 'test:{}'.format(global_counter))
    global_counter += 1


ani = animation.FuncAnimation(fig, animate, np.arange(1,1000), interval=frameRate)

plt.tight_layout()
from IPython.display import HTML
HTML(ani.to_html5_video())

输出:

问题是,执行时间与次数成正比,然后生成图。因此,如果如上所述为 1000 或更多,则在生成图形之前需要相当长的时间。看起来它在输出图形之前生成了所有 1000 帧。这样我至少需要 20000 帧。相反,只要网站打开或在没有编译时妥协的情况下设置上限,它就应该是实时和更新的。

下一个问题是,在 1000 之后,计数器重新开始。 global counter不应该继续增加吗?

我要

  1. 程序立即启动,然后像我引用的示例一样动态更新。
  2. 在帧计数结束后继续增加计数器或不重置变量的程序。如果不是 matplotlib,seaborn 或 plotly 或任何其他库都可以提供帮助吗?

我在 ipython notebook(anaconda 环境)中使用 Python 3.x。

ani.to_html5_video() 创建一个文件。要创建此文件,需要提前知道所有帧。因此动画 运行 完成后,这些帧将被保存并转换为 html5 视频。

如果您想实时观看动画,可以使用 %matplotlib notebook 后端而不保存动画。

至于 1000 帧,您在 FuncAnimationnp.arange(1,1000) 的第三个参数中自己设置了该数字。要么删除该参数,要么在此处选择不同的数字,例如frames =20000.