Python matplotlib如何调整导航和光标显示

Python matplotlib如何调整导航和光标显示,python,matplotlib,Python,Matplotlib,使用twinx在两个不同的y轴标度上绘制两个时间序列时: ax1 = pp.subplot(111) ax2 = ax1.twinx() 导航的默认行为似乎是: 缩放/平移将同时控制两个轴 右下角显示y值为ax2的鼠标光标坐标 我经常发现使用set\u-navigate(多亏了提示)关闭其中一个轴的缩放/平移非常有用。但是,当ax2关闭导航时,坐标显示也将关闭 是否可以在不关闭坐标显示的情况下禁用缩放/平移 更好的是,在显示光标坐标时,是否有方法指定从两个轴中的哪一个轴获取y值 [版本信息:p

使用
twinx
在两个不同的y轴标度上绘制两个时间序列时:

ax1 = pp.subplot(111)
ax2 = ax1.twinx()
导航的默认行为似乎是:

  • 缩放/平移将同时控制两个轴
  • 右下角显示y值为ax2的鼠标光标坐标
  • 我经常发现使用
    set\u-navigate
    (多亏了提示)关闭其中一个轴的缩放/平移非常有用。但是,当ax2关闭导航时,坐标显示也将关闭

    是否可以在不关闭坐标显示的情况下禁用缩放/平移

    更好的是,在显示光标坐标时,是否有方法指定从两个轴中的哪一个轴获取y值


    [版本信息:python 3.4.3+matplotlib 1.5.1]

    似乎没有简单的方法(ala
    set\u-navigate
    )来做到这一点。我设法找到了问题,并对其进行了一些修改,以完成我需要的:

    class Cursor(object):
        def __init__(self, fig, ax, ax2=None, xfmt=None, yfmt=None):
            self.fig = fig
            self.ax = ax
            self.ax2 = ax2
            self.xfmt = xfmt
            self.yfmt = yfmt
            plt.connect('button_press_event', self)
    
        def __call__(self, event):
             if event.button == 3 and self.ax2 is not None: # right click
                ax = self.ax2
            elif event.button:
                ax = self.ax
            inv = ax.transData.inverted()
            x, y = inv.transform((event.x, event.y))
            self.fig.canvas.toolbar.set_message('x={} y={}'.format(x if self.xfmt is None else self.xfmt(x), y if self.yfmt is None else self.yfmt(y)))
    
    然后我可以像下面这样实例化一个
    光标

    fig,ax = plt.subplots(1,1)
    ax2 = ax.twinx()
    Cursor(fig, ax, ax2)
    

    无论任一轴的导航状态如何,左/右键单击绘图将在导航工具栏的右下角显示左/右轴的坐标。

    似乎没有简单的方法(ala
    set\u-navigate
    )可以做到这一点。我设法找到了问题,并对其进行了一些修改,以完成我需要的:

    class Cursor(object):
        def __init__(self, fig, ax, ax2=None, xfmt=None, yfmt=None):
            self.fig = fig
            self.ax = ax
            self.ax2 = ax2
            self.xfmt = xfmt
            self.yfmt = yfmt
            plt.connect('button_press_event', self)
    
        def __call__(self, event):
             if event.button == 3 and self.ax2 is not None: # right click
                ax = self.ax2
            elif event.button:
                ax = self.ax
            inv = ax.transData.inverted()
            x, y = inv.transform((event.x, event.y))
            self.fig.canvas.toolbar.set_message('x={} y={}'.format(x if self.xfmt is None else self.xfmt(x), y if self.yfmt is None else self.yfmt(y)))
    
    然后我可以像下面这样实例化一个
    光标

    fig,ax = plt.subplots(1,1)
    ax2 = ax.twinx()
    Cursor(fig, ax, ax2)
    
    无论任一轴的导航状态如何,左/右单击绘图将在导航工具栏的右下角显示左/右轴的坐标