matplotlib 激活微件时无法自动退出平移或缩放模式

yjghlzjz  于 2023-11-22  发布在  其他
关注(0)|答案(1)|浏览(108)

我在matplotlib工具栏中添加了一个名为“选择点”的小部件,它允许我在图形窗口中选择一组点并将它们写入文件。这很好用。但是,如果我以前必须在单击工具栏上的小部件按钮之前缩放或平移到我感兴趣的区域,缩放或平移模式保持活动状态,除非我手动单击缩放/平移,否则我无法使用小部件按钮选择点。工具栏上的平移按钮来取消激活这些模式。当我的小部件按钮被点击时,有没有一种方法可以通过编程方式退出缩放或平移模式?这是一个小麻烦,但我想拥有的一个很好的功能。
我试过查看所有plt.gcf().canvas方法,但似乎找不到在代码中选择/禁用工具栏模式的位置。

  • 将名为“选择点”的工具栏小工具按钮链接到getPoints类的代码部分-
# Get figure handles
figNum = plt.gcf()
ax = plt.gca()
pts = ax.collections[-1]

# Route 'Select Points' button to matplotlib figure window
fig1.canvas.manager.toolmanager.add_tool('Select Points', getPoints, figNum = figNum, ax = ax, pts = pts, outPath = outPath, origTitle = origTitle)
fig1.canvas.manager.toolbar.add_tool('Select Points', 'navigation', 3)

字符串
-getPoints类-

class getPoints(ToolToggleBase):

default_toggled = False

def __init__(self, *args, figNum, ax, pts, outPath, origTitle, **kwargs):

    # Initialize base variables
    self.figNum = figNum
    self.ax = ax
    self.pts = pts
    self.outPath = outPath
    self.origTitle = origTitle

    # Call super-initialized variables
    super().__init__(*args, **kwargs)

def enable(self, *args, **kwargs):

    # Get inputs for getPlotPts function
    figNum = self.figNum
    ax = self.ax
    pts = self.pts
    outPath = self.outPath 
    origTitle = self.origTitle
    onState = True

    # Call getPlotPts function
    getPlotPts(self, figNum, ax, pts, outPath, origTitle, onState)

def disable(self, *args, **kwargs):

    # Get inputs for getPlotPts function
    figNum = self.figNum
    ax = self.ax
    pts = self.pts
    outPath = self.outPath 
    origTitle = self.origTitle
    onState = False

    # Call getPlotPts function
    getPlotPts(self, figNum, ax, pts, outPath, origTitle, onState)

bakd9h0s

bakd9h0s1#

我认为你在这里所追求的是工具栏的pan()和zoom()方法,当你点击这些按钮时会调用它们。如果你获得了工具栏的引用tbar,那么你可以调用这些方法:

import matplotlib.pyplot as plt
fig = plt.figure()
ax = plt.plot([0,1],[0,1])
tbar = fig.canvas.toolbar
tbar.pan()
tbar.zoom()
plt.show()

字符串
这些方法实现了一个切换,因此重复调用将再次关闭它们。

相关问题