7

我正在尝试使用该FuncAnimation模块制作动画,但我的代码只产生一帧然后停止。似乎它没有意识到需要更新什么。你能帮我出什么问题吗?

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

x = np.linspace(0,2*np.pi,100)

def animate(i):
    PLOT.set_data(x[i], np.sin(x[i]))
    print("test")
    return PLOT,

fig = plt.figure()  
sub = fig.add_subplot(111, xlim=(x[0], x[-1]), ylim=(-1, 1))
PLOT, = sub.plot([],[])

animation.FuncAnimation(fig, animate, frames=len(x), interval=10, blit=True)
plt.show()
4

1 回答 1

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

x = np.linspace(0,2*np.pi,100)

fig = plt.figure()  
sub = fig.add_subplot(111, xlim=(x[0], x[-1]), ylim=(-1, 1))
PLOT, = sub.plot([],[])

def animate(i):
    PLOT.set_data(x[:i], np.sin(x[:i]))
    # print("test")
    return PLOT,

ani = animation.FuncAnimation(fig, animate, frames=len(x), interval=10, blit=True)
plt.show()

您需要保留对动画对象的引用,否则它会被垃圾收集并且它的计时器会消失。

将动画附加到底层对象的硬引用存在一个未解决的问题。Figure

如所写,您的代码仅绘制一个不可见的点,我对其进行了一些更改以绘制当前索引

于 2013-09-11T16:37:03.623 回答