Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
覆盖matplotlib';s平移工具(wx)_Matplotlib_Wxpython_Toolbar - Fatal编程技术网

覆盖matplotlib';s平移工具(wx)

覆盖matplotlib';s平移工具(wx),matplotlib,wxpython,toolbar,Matplotlib,Wxpython,Toolbar,我正在使用wxPython面板中的matplotlib进行一些重型绘图。我的问题出现在使用本机平移工具时——它看起来好像matplotlib试图在拖动平移手柄时不断重新绘制画布。随着我绘制的数据量的增加,这变得非常不稳定(已经通过数据收集等进行了优化) 就性能而言,我认为在平移结束时释放鼠标时,画布最好只绘制一次。我意识到这将意味着我必须用自己的类扩展WxAgg NavigationToolbar2,但我想知道是否有人尝试过类似的方法,可以建议我覆盖哪些函数 非常感谢我花了很多时间对matplo

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

就性能而言,我认为在平移结束时释放鼠标时,画布最好只绘制一次。我意识到这将意味着我必须用自己的类扩展WxAgg NavigationToolbar2,但我想知道是否有人尝试过类似的方法,可以建议我覆盖哪些函数


非常感谢

我花了很多时间对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