获取相对于子图的单击点的索引

时间:2018-01-02 19:35:17

标签: python matplotlib

我在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) 返回点击点相对于整个图的索引,我想要的是相对于第二个子图的索引。 如何获得相对于子图的索引?

1 个答案:

答案 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()