FuncAnimation仅在已保存的.mp4文件中绘制最后一帧

时间:2019-10-30 16:02:00

标签: python matplotlib animation save

我有一个可视化类,该类使用matplotlib可视化密码箱。 每次迭代后,密码箱的配置都会更改,并调用可视化文件的update方法,并再次绘制所有机制。每次迭代后,我都会得到一个新的轴对象。在运行时显示它们可以正常工作,但是当我将轴对象存储在列表中并稍后尝试制作动画时,保存后我得到的电影只有最后一帧显示了20秒(100帧,200毫秒)间隔)。 我发现的大多数问题都存在未专门分配动画对象的问题,但是我已经在这样做了。我使用ipython还是只使用python从shell中执行代码都没关系。 不幸的是,不可能给出一个可行的例子来复制它。无论如何,也许您有什么错。谢谢!

    def init_grid(self,lockbox):
        '''Create the figure objects and the grid'''
        self.size = lockbox.size
        self.square_width = lockbox.square_width
        self.door_idx = lockbox.find_door()
        w = self.size[0]*self.square_width + 0.001
        h = self.size[1]*self.square_width + 0.001

        self.fig, self.ax = plt.subplots(figsize=(20,20))
        self.ax.set_title('Lockbox')
        self.ax.set_xticks(np.arange(0,w,52.5))
        self.ax.set_yticks(np.arange(0,h,52.5))
        self.ax.grid(b=True, which='major', color='black', linestyle='-', linewidth=2)

    def update(self, grid, idx_mech):
        '''Deletes all rectangles and draws the new configuration of mechanisms'''
        self.history.append(self.ax)
        #Removing all rectangles
        [p.remove() for p in reversed(self.ax.patches)]
        #Draw new rectangles
        self.draw_mechanisms(grid, idx_mech)
        plt.draw()
        plt.pause(0.1)

    def save_animation(self):
        '''Saves the current simulation to animation.mp4'''
        self.history.append(self.ax)
        anima = FuncAnimation(self.fig, self.animate, frames = len(self.history), blit=False)
        #plt.show() here only shows the last frame as well.
        anima.save('animation.mp4')

    def animate(self,i):
        return self.history[i]

0 个答案:

没有答案