如何从鼠标点击事件中获取Matplotlib坐标轴的索引?
问题解答
1. Axes输出的第一个属性名称
打印Axes对象时,输出格式Axes(x0, y0; widthxheight)中的第一个数值是归一化画布坐标下的Axes左边界位置,对应Axes对象的get_position()方法返回的Bbox对象的x0属性。
你可以通过代码验证:
print(axs[0].get_position().x0) # 输出类似0.102541的数值
这个值以画布左下角为原点(0,0)、右上角为(1,1)的归一化坐标系,代表Axes在水平方向的起始位置。
2. 获取被点击的axs索引的简便方法
有两种实用的实现方式:
方式一:给Axes绑定自定义索引属性
创建Axes时,直接为每个子图添加索引标记:
fig, axs = plt.subplots(ncols=2, nrows=1, figsize=(3.5, 2.5), layout="constrained") for idx, ax in enumerate(axs): ax.index = idx # 自定义索引属性 ax.plot(np.random.rand(10)) def onclick(event): if event.inaxes: print("点击的axs索引:", event.inaxes.index)
方式二:通过fig.axes列表匹配索引
如果画布上的Axes都是由subplots创建的,fig.axes的顺序和axs完全一致,可以直接通过列表索引获取:
def onclick(event): if event.inaxes: idx = list(fig.axes).index(event.inaxes) print("点击的axs索引:", idx)
注意:如果画布上存在额外创建的Axes,这种方式可能返回错误索引,此时方式一更可靠。
内容的提问来源于stack exchange,提问作者Paul Jurczak
相关产品推荐
相关产品推荐

