我正在FuncAnimation上运行一个简单的测试,这时我注意到帧中的第一个索引正在重复。这是我的代码:
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig = plt.figure( figsize=(10,6) )
ax = fig.add_subplot(111, projection='3d')
Writer = animation.writers['ffmpeg']
writer = Writer(fps=20, metadata=dict(artist='Me'))
def animate(i):
x = np.linspace(0, 2*np.pi, 120)
y = np.cos(i*x)
z = x
ax.clear()
print(i)
im = ax.plot(x, y, z)
ani = matplotlib.animation.FuncAnimation(fig, animate, frames=range(5), repeat=False, blit=False)
ani.save("movie.mp4", writer=writer)
plt.show()
当我运行这个程序时,我得到以下输出:
0
0
1
2
3
4
我不明白的是,为什么0在输出中出现两次?
原因是,您没有将init_func
属性传递到FuncAnimation
。文件中的这句话解释了为什么:
init_func:可调用,可选一种用于绘制清晰框架的函数。如果没有给出将使用从框架序列中的第一个项目进行绘制。这函数将在第一帧之前调用一次。
因此,当您开始动画时,第一帧总是作为init_func
的结果绘制的。您可以设置自定义init_func
,它在动画开始时调用。