FuncAnimation的init函数被调用2次而不是一次

时间:2014-03-04 16:54:34

标签: python matplotlib

我正在尝试使用python进行一些动画,并在完成this教程的“动画”部分时发现了一些奇怪的东西。 相关代码:

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

fig = plt.figure()
fig.set_dpi(100)
fig.set_size_inches(7, 6.5)

ax = plt.axes(xlim=(0, 10), ylim=(0, 10))
patch = plt.Circle((5, -5), 0.75, fc='y')

def init():
    patch.center = (5, 5)
    ax.add_patch(patch)
    return patch,

def animate(i):
    x, y = patch.center
    x = 5 + 3 * np.sin(np.radians(i))
    y = 5 + 3 * np.cos(np.radians(i))
    patch.center = (x, y)
    return patch,

anim = animation.FuncAnimation(fig, animate, 
                               init_func=init, 
                               frames=360, 
                               interval=20,
                               blit=True)

plt.show()

在我的电脑上,python脚本显示两个圆圈而不是一个圆圈,其中一个固定在(5,5)。经过一番搜索,我发现init()函数被调用了两次。这似乎始终如一 - 我在matplotlib示例中添加了对simple_anim脚本的init()函数的打印“测试”调用,如下所示:

def init():
    print "test"
    line.set_ydata(np.ma.array(x, mask=True))
    return line,

得到了

pedsb@pedsb:~/shook_/PSM.Application.Simulation$ python simple_anim.py 
test
test

这是预期的行为吗?如何修复教程中的代码,以便只显示一个圆圈?我可以将初始patch.center设置为屏幕外的某个地方,但我不太喜欢那个“解决方案”。

0 个答案:

没有答案