对于一个个人项目,我试图动画一个相当大的数据集(1000行),以显示多鸟潜水在木星笔记本。最后,我还想添加加速数据的子图。
我使用简单的示例作为粗略的模板,例如在:https://towardsdatascience.com/animations-with-matplotlib-d96375c5442c中的增长线圈示例。
代码本身似乎运行缓慢但很好,但是它没有输出动画,只是一个静态图:

以下是我的当前代码:
x = np.array(dives.index)
y = np.array(dives['depth'])
x_data, y_data = [], []
fig = plt.figure()
ax = plt.axes(xlim=(0, 1000), ylim=(min(y),max(y)))
line, = ax.plot([], [])
def init():
line.set_data([], [])
return line,
def animate(i):
x_data.append(x[i])
y_data.append(y[i])
line.set_data(x, y)
return line,
plt.title('Bird Dives')
ani = animation.FuncAnimation(
fig, animate, init_func=init, frames= 1000, interval=50, blit=True)
ani.save('./plot-test.gif')
plt.show()为什么它只是在绘制一个图形而不是一个动画呢?
发布于 2020-03-17 18:11:12
是的,您的错误在您的animate函数中。您有line.set_data(x, y),它在每个帧上绘制x和y的全部内容(从而生成一个不改变的动画图)。
您打算在animate函数中使用的是line.set_data(x_data, y_data)。
至于性能:您可以通过不创建空列表并在每次迭代时追加到它来改进这一点。相反,将原始数组( x和y )切片更简单。请考虑下面的animate函数:
def animate(i):
line.set_data(x[:i], y[:i])
return line,话虽如此,考虑到你有一千帧,它还需要一段时间才能运行。
https://stackoverflow.com/questions/60727381
复制相似问题