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 blit

O 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ê?

questionAnswers(3)

yourAnswerToTheQuestion