如何创建动态更新的不确定的funcanimation帧?

时间:2018-07-22 15:12:02

标签: python python-3.x matplotlib plotly seaborn

我正在尝试在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())

输出:

enter image description here

问题在于,执行时间与次数成正比,然后生成图。因此,如果大于等于1000,则生成图形需要花费大量时间。看起来它在输出图形之前会生成所有1000帧。这样,我至少需要约20000帧。相反,它应该是实时的,并且只要打开网站就可以更新,或者可以在不影响编译时间的情况下更新到上限。

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

我想要

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

我在ipython笔记本(anaconda环境)中使用Python3.x。

1 个答案:

答案 0 :(得分:2)

ani.to_html5_video()创建一个文件。为了创建该文件,需要事先知道所有框架。因此,动画完整运行一次,然后保存这些帧并将其转换为html5视频。

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

对于1000帧,您要在FuncAnimationnp.arange(1,1000)的第三个参数中自行设置该数字。删除该参数或在此处选择其他数字,例如frames =20000