gpt4 book ai didi

python - 动画 Matplotlib 面板 - blit 留下旧帧

转载 作者:太空宇宙 更新时间:2023-11-03 13:51:56 25 4
gpt4 key购买 nike

我有一个包含 matplotlib 面板的 wxPython 应用程序(由 wxmpl 提供,尽管我在普通的 FigureCanvasWxAgg Canvas 上看到过相同的内容)。

我想为面板中的一个情节制作动画,过去我曾做过类似的事情。我这样做的方式是建议的:

  • 复制背景
  • 情节
  • [...]
  • 恢复背景
  • 更新线路数据
  • 绘画艺术家
  • block

问题是情节并没有被背景恢复“覆盖”,而是留在那里,整个事情看起来一团糟,这是可以理解的。

一些(简化的)代码:

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)

然后,在更新时:

canvas.restore_region(bg_bottom)
line.set_ydata(new_y)
ax_bottom.draw_artist(line)
canvas.blit(ax_bottom.bbox)

新线被绘制(而且非常快!:),但由于某种原因它发生在旧线上。有人能猜出这是为什么吗?

最佳答案

应要求添加为答案:)

尝试在调用 fig.canvas.copy_from_bbox 之前调用 fig.canvas.draw()。确切的行为取决于后端,因此在不同的平台上会有所不同,但一般来说,您需要先绘制 Canvas ,然后再尝试从中复制内容。

关于python - 动画 Matplotlib 面板 - blit 留下旧帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6286731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com