【问题标题】:Animating Matplotlib panel - blit leaves old frames behind动画 Matplotlib 面板 - blit 留下旧帧
【发布时间】:2011-06-09 00:13:08
【问题描述】:

我有一个 wxPython 应用程序,其中包含一个 matplotlib 面板(由 wxmpl 提供,尽管我在普通的 FigureCanvasWxAgg 画布上看到了同样的情况)。

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

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

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

一些(简化的)代码:

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.draw(),然后再拨打fig.canvas.copy_from_bbox。具体行为取决于后端,因此在不同平台上会有所不同,但一般来说,您需要先绘制画布,然后再尝试从中复制内容。
  • @Joe 感谢您的建议。不幸的是,它没有区别(更新代码以反映变化)
  • @Joe 没关系,我收回了。你是对的!我还没有完成加载/布局/绘图/重绘其他东西,所以我在更好的时候复制了它,它可以工作。请添加一个答案,以便我接受它:)

标签: python matplotlib wxpython wxmpl


【解决方案1】:

应要求添加为答案:)

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

【讨论】:

    【解决方案2】:

    用 FigureCanvasWxAgg 测试。我认为在您初始化面板和轴之间会发生什么,然后绘制轴被移动或调整大小或其他东西。尝试等待获得这些背景,直到您真正绘制, 即当您初始化框架/面板时:

    ...
    bg_top = None
    bg_bottom = None
    line, = ax_bottom.plot(x, y, 'k', animated=True)
    ...
    

    你更新的时间:

    def update(self, evt):
        if bf_top is None:
            bg_top = canvas.copy_from_bbox(ax_top.bbox)
            bg_bottom = canvas.copy_from_bbox(ax_bottom.bbox)
        canvas.restore_region(bg_bottom)
        line.set_ydata(new_y)
        ax_bottom.draw_artist(line)
        canvas.blit(ax_bottom.bbox)
    

    【讨论】:

      【解决方案3】:

      您必须将“draw_event”链接到背景的新副本。 否则,旧背景将始终位于您想要的背景上,您只能通过工具栏中的缩放或平移来获得。它对我有用。

      马丁。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-08
        • 1970-01-01
        • 2017-01-31
        • 2022-12-09
        • 2013-11-19
        相关资源
        最近更新 更多