У меня есть класс 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]