我有一个可视化类,该类使用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]