关于matplotlib.animation.FuncAnimation的args

时间:2012-11-30 01:20:26

标签: python animation matplotlib

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig = plt.figure()
ax = fig.add_subplot(111)

x = np.arange(0, 2*np.pi, 0.01)        # x-array
i=1
line, = ax.plot(x, np.sin(x))

def animate():
    i= i+2
    x=x[1:] + [i]
    line.set_ydata(np.sin(x))  # update the data
    return line,

#Init only required for blitting to give a clean slate.
def init():
    line.set_ydata(np.ma.array(x, mask=True))
    return line,

ani = animation.FuncAnimation(fig, animate, init_func=init,
    interval=25, blit=True)
plt.show()

我得到这样的错误:animate()不接受任何参数(给定1个)......很困惑。我甚至没有给回调函数一个arg。有没有我错过的东西?

感谢。

1 个答案:

答案 0 :(得分:6)

看起来文档已关闭,或者至少在此处不清楚:该函数具有内在的第一个参数,即帧编号。因此,您只需将其定义为def animate(*args)def animate(framenumber, *args),甚至def animate(framenumber, *args, **kwargs)

另见this example

请注意,之后你会遇到其他问题:

  • ix中的animate应声明为global。或者更好,通过fargs中的FuncAnimation关键字将它们作为参数传递。

  • x = x[1:] + [i]无法按照您的想法运作。 Numpy数组的工作方式与列表不同:它会将[i]添加到x[1:]的每个元素,并将其分配给x,从而使x一个元素缩短。一种可能的正确方法是x[:-1] = x[1:]; x[-1] = i