使用twinx
在两个不同的y刻度上绘制两个时间序列时:
ax1 = pp.subplot(111)
ax2 = ax1.twinx()
导航的默认行为似乎是:
ax2
我经常发现使用set_navigate
关闭其中一个轴的缩放/平移很有用(感谢this提示)。但是,当关闭ax2的导航时,坐标显示也会关闭。
无论如何在不关闭坐标显示的情况下禁用缩放/平移?
更好的是,有没有办法在显示光标坐标时指定两个轴中的哪一个取y值?
[版本信息:python 3.4.3 + matplotlib 1.5.1]
答案 0 :(得分:0)
似乎没有简单的方法(ala set_navigate
)来做到这一点。我设法找到了this问题并对其进行了一些修改以完成我需要的工作:
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)))
然后,我可以像这样实例化Cursor
:
fig,ax = plt.subplots(1,1)
ax2 = ax.twinx()
Cursor(fig, ax, ax2)
无论两个轴的导航状态如何,左/右点击图表都会在导航工具栏的右下角显示左/右轴的坐标。