3

我正在使用 wxPython 面板中的 matplotlib 进行一些重型绘图。我的问题出现在使用本机平移工具时 - 它看起来好像 matplotlib 在您拖动平移手柄时试图不断重绘画布。随着我正在绘制的数据量,这变得非常不稳定(已经使用 Collections for data 等进行了优化)

在性能方面,我认为画布在平底锅结束时释放鼠标时只绘制一次会更好。我意识到这意味着我必须用我自己的扩展 WxAgg NavigationToolbar2 类,但我想知道是否有人尝试过类似的事情并且可以建议我重写哪些函数?

非常感谢

4

1 回答 1

3

我花了很多时间对 matplotlib 后端进行修改,我从未做过这个特定的更改,但我可以向您展示一行代码来注释掉,这将停止动态更新:

我假设您正在使用WxAgg后端,如果是这种情况,请打开此文件:C:\Python27\Lib\site-packages\matplotlib\backends\backend_wx.py

并注释掉此处指示的行:

def dynamic_update(self):
    d = self._idle
    self._idle = False
    if d:
        #self.canvas.draw() #<--- Comment out to stop the redrawing during the Pan/Zoom
        self._idle = True

我对此进行了测试,它似乎很好地解决了您的问题。我进行了一些快速挖掘,但没有看到任何其他调用此过程的函数,因此您甚至可以将其更改为:

def dynamic_update(self):
    pass

...您将在基NavigationToolbar2类中找到相同的代码

(当然,如果您对此更改感到满意,您可以做更多的工作来通过这种修改创建自己的自定义后端。只是为了确保在升级 matplotlib 时不会丢失更改)

于 2012-12-05T18:25:11.113 回答