覆盖matplotlib';s平移工具(wx)
我正在使用wxPython面板中的matplotlib进行一些重型绘图。我的问题出现在使用本机平移工具时——它看起来好像matplotlib试图在拖动平移手柄时不断重新绘制画布。随着我绘制的数据量的增加,这变得非常不稳定(已经通过数据收集等进行了优化) 就性能而言,我认为在平移结束时释放鼠标时,画布最好只绘制一次。我意识到这将意味着我必须用自己的类扩展WxAgg NavigationToolbar2,但我想知道是否有人尝试过类似的方法,可以建议我覆盖哪些函数覆盖matplotlib';s平移工具(wx),matplotlib,wxpython,toolbar,Matplotlib,Wxpython,Toolbar,我正在使用wxPython面板中的matplotlib进行一些重型绘图。我的问题出现在使用本机平移工具时——它看起来好像matplotlib试图在拖动平移手柄时不断重新绘制画布。随着我绘制的数据量的增加,这变得非常不稳定(已经通过数据收集等进行了优化) 就性能而言,我认为在平移结束时释放鼠标时,画布最好只绘制一次。我意识到这将意味着我必须用自己的类扩展WxAgg NavigationToolbar2,但我想知道是否有人尝试过类似的方法,可以建议我覆盖哪些函数 非常感谢我花了很多时间对matplo
非常感谢我花了很多时间对matplotlib后端进行了修改,我从来没有做过这种特定的更改,但我可以向您展示一行代码来注释,这将停止动态更新: 我假定您使用的是
WxAgg
后端,如果是这种情况,请打开此文件:C:\Python27\Lib\site packages\matplotlib\backends\backend\u 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
…这与您在基本导航工具栏2
类中找到的代码相同
(当然,如果您对此更改感到满意,您可以做更多的工作,通过这种修改来创建自己的自定义后端。只是为了确保在升级matplotlib时不会丢失更改)我知道这很简单!非常感谢你的帮助,我想做的唯一一件事是在开始时用平移器“抓住”画布,这样当你在绘图上平移时,画面不会动态更新,但静态画布图像会随着鼠标移动,在释放后绘制的地方会出现空白。这将在保持性能优势的同时,更好地了解您在绘图中的位置。我觉得这可以用canvas.copy_from_bbox来完成,我一定会在有时间的时候去探索。是的,这听起来像是一个优雅的解决方案。当我今天在后端挖掘时,我看到了一些可能最终会修改的函数
press\u pan()
,release\u pan()
和drag\u pan()
。有相当多的继承和委托正在进行,但我认为最终所有的脏活都会在axis.py
drag\u pan()
函数中进行。无论如何,祝你玩得开心,祝你好运!
def dynamic_update(self):
pass