覆盖matplotlib的平移工具(wx)

时间:2012-12-05 04:13:09

标签: matplotlib wxpython toolbar

我正在使用安装在wxPython面板中的matplotlib进行一些重型绘图。我的问题出现在使用原生平移工具时 - 看起来好像matplotlib试图在拖动平底锅手柄时不断重绘画布。随着我正在绘制的数据量变得非常不稳定(已经针对数据收集进行了优化等)

就性能而言,我认为在平底锅末端释放鼠标时,画布只需绘制一次就更好了。我意识到这意味着我必须用我自己的扩展WxAgg NavigationToolbar2类,但是我想知道是否有人尝试过类似的东西并且可以告诉我要覆盖哪些函数?

非常感谢

1 个答案:

答案 0 :(得分: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时不会丢失更改)