FuncAnimation рисует только последний кадр в сохраненном файле .mp4 - PullRequest
0 голосов
/ 30 октября 2019

У меня есть класс Visualization, который визуализирует Lockbox с помощью matplotlib. После каждой итерации конфигурация замка блокируется, вызывается метод обновления визуализации, и все механизмы рисуются снова. После каждой итерации я получаю новую ось объектов. Отображение их во время выполнения работает нормально, но когда я сохраняю объекты осей в списке и пытаюсь сделать из них анимацию позже, после сохранения я получаю фильм с отображением только последнего кадра в течение 20 секунд (100 кадров, 200 мсIntervall). У большинства вопросов, которые я обнаружил, была проблема не назначать объект анимации специально, но я уже делаю это. Не имеет значения, использую ли я ipython или просто выполняю код из оболочки с помощью python. К сожалению, невозможно привести рабочий пример для его воспроизведения. Может быть, у вас есть идея, что не так, в любом случае. Спасибо!

    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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...