【问题标题】:Matplotlib reverse animationMatplotlib 反向动画
【发布时间】:2021-03-17 18:39:12
【问题描述】:

当使用animation.FuncAnimation 时,是否可以在动画向前播放后以最佳方式反转动画?即相当于

FuncAnimation(.., frames=np.hstack([range(10), range(9)[::-1]]))

这会以相反的顺序重绘帧,当 50% 的数据完全相同时会消耗绘图计算和内存。 FuncAnimation 确实有缓存机制,但它或任何其他 animation. 是否有 reverse=True?请注意,我的所有数据都是通过每个帧的简单索引预先计算和检索的。

【问题讨论】:

  • 如果是预计算的,为什么不使用ArtistAnimation?这正是这种翻书方法设计的应用程序。
  • 我同意 T 先生的观点。我使用了艺术家和 framelist += framelist[-1::-1],它就像一个魅力!!

标签: python matplotlib matplotlib-animation


【解决方案1】:

您是在(交互式?)matplotlib 后端寻找解决方案,还是将此动画写入文件?

后者要简单得多,因为您可以简单地使用ffmpeg 之类的工具来还原和附加最终的 gif/电影文件。例如,请参阅this answer

如果您需要一个解决方案 matplotlib 中,那么我想您需要将所有需要的计算存储在单独的对象中(例如,创建一个像 frames = { 0: {"x":0, "y":1, … } } 这样的字典,然后告诉 FuncAnimation 更新为一个简单的“查找”功能,例如:

def update(frame):
    xdata = frames[frame]["x"]
    ydata = frames[frame]["y"]
    ln.set_data(xdata, ydata)
    return ln,

第三种选择是将您的轴存储为泡菜对象,即:

pickle.dump(ax, file('frame_0.pickle', 'w'))

然后尝试在 FuncAnimation 的更新调用中重新加载那些腌制的帧,例如:

ax = pickle.load(file('frame_0.pickle'))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    相关资源
    最近更新 更多