使用Matplotlib和FuncAnimation对具有不同FPS的对象进行动画处理

时间:2019-08-16 11:57:13

标签: python-3.x matplotlib

我想创建一个动画,在其中我更新两个不同的对象,例如AB。通过使用具有不同FPS(其中一个为15 FPS,另一个为30 FPS)的不同设备来检索我收集到每个对象的数据。数据的长度为30秒,因此,如果要使用Matplotlib创建具有这样的持续时间和两个对象的动画,必须以15 FPS的速度A和以30 FPS的速度B进行动画处理

到目前为止,我能够同时创建两个对象的动画,但是我只能输入一个FPS。如果我输入15,则A没问题,但是B太慢,则两者都不同步。

我尝试过的内容的总结:

(...)

    A, = plt.plot([], [], 'bo-', animated=True)
    B, = plt.plot([], [], 'co-', animated=True)

    def init():
        ax.set_xlim(0, 80)
        ax.set_ylim(-15, 15)
        return A, B,

    def update(frame):
        """Perform animation step"""
        # Some arrays with data are xdata and ydata. In this case 
        # they are moving lines
        A.set_data([0, xdata1[frame]], [0, ydata1[frame]])
        B.set_data([0, xdata2[frame]], [0, ydata2[frame]])
        return A, B,

    ani = FuncAnimation(fig, update, frames=range(len(xdata1)), init_func=init, blit=True)
    ani.save('video.mp4', fps=15, extra_args=['-vcodec', 'libx264'])

(...)

任何想法是否可以做到?即使我需要丢失一些以30FPS运行的对象的数据,也可以。谢谢!

1 个答案:

答案 0 :(得分:0)

一个简单的“黑客”解决方案是复制A的每个元素,以便在A和B中具有相同数量的点。如果数据是numpy数组,则可以这样做

xdata1 = np.repeat(xdata1, 2)
ydata1 = np.repeat(ydata1, 2)