Python 带有两个轴的Matplotlib光标值

Python 带有两个轴的Matplotlib光标值,python,matplotlib,Python,Matplotlib,我使用twinx()在绘图上获得两个y轴。但是,我希望导航栏报告第一个轴的y坐标。默认情况下,它向第二个轴报告位置。如何将其更改为报告第一个轴,或者更好地同时报告两个轴?如果得到tcaswell答案(,和)的帮助,您可以修改跟踪器以显示两个轴的坐标,如下所示: import numpy as np import matplotlib.pyplot as plt import matplotlib.cm as cm def make_format(current, other): # c

我使用
twinx()
在绘图上获得两个y轴。但是,我希望导航栏报告第一个轴的y坐标。默认情况下,它向第二个轴报告位置。如何将其更改为报告第一个轴,或者更好地同时报告两个轴?

如果得到tcaswell答案(,和)的帮助,您可以修改跟踪器以显示两个轴的坐标,如下所示:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm

def make_format(current, other):
    # current and other are axes
    def format_coord(x, y):
        # x, y are data coordinates
        # convert to display coords
        display_coord = current.transData.transform((x,y))
        inv = other.transData.inverted()
        # convert back to data coords with respect to ax
        ax_coord = inv.transform(display_coord)
        coords = [ax_coord, (x, y)]
        return ('Left: {:<40}    Right: {:<}'
                .format(*['({:.3f}, {:.3f})'.format(x, y) for x,y in coords]))
    return format_coord

np.random.seed(6)
numdata = 100
t = np.linspace(0.05, 0.11, numdata)
y1 = np.cumsum(np.random.random(numdata) - 0.5) * 40000
y2 = np.cumsum(np.random.random(numdata) - 0.5) * 0.002

fig = plt.figure()

ax1 = fig.add_subplot(111)
ax2 = ax1.twinx()

ax2.format_coord = make_format(ax2, ax1)

ax1.plot(t, y1, 'r-', label='y1')
ax2.plot(t, y2, 'g-', label='y2')

plt.show()

导航栏显示顶部轴的坐标。因此,您所要做的就是使右轴的
zorder
低于左轴:

ax2.set_zorder(-100)

这也将改变图形的外观。也就是说,绘制在右轴上的所有内容都将位于绘制在左轴上的所有内容之后。在许多情况下,这几乎没有什么区别。

为什么不改变原始函数的顺序,使第二个是第一个呢?这显示了双y轴的顺序。你可以将这个技巧与@vish的建议结合起来,以达到你想要的效果。我希望我知道如何使跟踪器报告光标相对于两个轴的位置。我正在动态更新绘图,因此在更新时切换轴将显示错误的比例,我特别希望在右侧显示特定轴。谢谢,这非常有效(除了格式问题,但我可以解决此问题)@Doug:关于格式问题:我希望我知道如何右对齐右边的坐标。唉,还有一件事我不知道怎么做……我指的是“左”和“右”之间的新线。在MPL1.2.1中,它看起来不像是在一行上的屏幕截图。扩展窗口不会改变任何事情。工作非常好。节省了我几个小时
ax2.set_zorder(-100)