我在MailItem
中有一个有2个子图的情节:
matplotlib
我已设置点击处理程序来处理鼠标点击事件:
plt.subplot(211), plt.imshow(img1)
plt.subplot(212, plt.imshow(img2)
问题是fig = plt.figure()
def onclick(event):
print plot.x, plot.y
cid = fig.canvas.mpl_connect('button_press_event', onclick)
返回点击点相对于整个图的索引,我想要的是相对于第二个子图的索引。
如何获得相对于子图的索引?
答案 0 :(得分:1)
你需要做两件事才能实现。首先,您的回调函数必须检查点击是否在感兴趣的轴内。其次,鼠标事件位置以显示坐标给出,必须将其转换为轴坐标。第一个要求可以使用Axes.in_axes()
来完成。第二个可以通过Axes.transAxes
变换实现。 (此变换从轴转换为显示坐标,因此必须将其从显示转换为轴坐标。)
一个小例子可能是:
import matplotlib.pyplot as plt
import functools
def handler(fig, ax, event):
# Verify click is within the axes of interest
if ax.in_axes(event):
# Transform the event from display to axes coordinates
ax_pos = ax.transAxes.inverted().transform((event.x, event.y))
print(ax_pos)
if __name__ == '__main__':
fig, axes = plt.subplots(2, 1)
# Handle click events only in the bottom of the two axes
handler_wrapper = functools.partial(handler, fig, axes[1])
fig.canvas.mpl_connect('button_press_event', handler_wrapper)
plt.show()