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。有没有我错过的东西?
感谢。
答案 0 :(得分:6)
看起来文档已关闭,或者至少在此处不清楚:该函数具有内在的第一个参数,即帧编号。因此,您只需将其定义为def animate(*args)
或def animate(framenumber, *args)
,甚至def animate(framenumber, *args, **kwargs)
。
另见this example。
请注意,之后你会遇到其他问题:
i
和x
中的animate
应声明为global
。或者更好,通过fargs
中的FuncAnimation
关键字将它们作为参数传递。
x = x[1:] + [i]
无法按照您的想法运作。 Numpy数组的工作方式与列表不同:它会将[i]
添加到x[1:]
的每个元素,并将其分配给x
,从而使x
一个元素缩短。一种可能的正确方法是x[:-1] = x[1:]; x[-1] = i
。