Animating Matplotlib panel - o blit deixa quadros antigos para trás
Eu tenho um aplicativo wxPython que contém um painel matplotlib (cortesia do wxmpl, embora eu tenha visto o mesmo com uma tela simples FigureCanvasWxAgg
Gostaria de animar uma das parcelas do painel e, no passado, fiz coisas semelhantes acontecerem. O jeito que eu faço é o sugerido:
copie o fundoenred [...]restore backgroundupdate line datadraw artist blitO problema é que as parcelas, em vez de serem "sobrescritas" pela restauração em segundo plano, ficam lá e tudo fica compreensivelmente bagunçad
Alguns códigos (simplificados):
fig = self.myPanel.get_figure()
ax_top = fig.add_subplot(211)
ax_bottom = self.fig.add_subplot(212)
canvas = fig.canvas
canvas.draw()
bg_top = canvas.copy_from_bbox(ax_top.bbox)
bg_bottom = canvas.copy_from_bbox(ax_bottom.bbox)
line, = ax_bottom.plot(x, y, 'k', animated=True)
Em seguida, na atualização:
canvas.restore_region(bg_bottom)
line.set_ydata(new_y)
ax_bottom.draw_artist(line)
canvas.blit(ax_bottom.bbox)
A nova linha é desenhada (e muito rápido! :), mas por algum motivo isso acontece na linha antiga. Alguém pode adivinhar por quê?