matplotlib 如何从鼠标点击事件中导出轴索引?

8qgya5xd  于 2023-11-22  发布在  其他
关注(0)|答案(1)|浏览(92)

这个Python 3.11脚本显示了两个图形(轴):

import numpy as np, matplotlib.pyplot as plt

def onclick(event):
  print(event.inaxes)

fig, axs = plt.subplots(ncols=2, nrows=1, figsize=(3.5, 2.5), layout="constrained")
axs[0].plot(np.random.rand(10))
axs[1].plot(np.random.rand(10))
cid = fig.canvas.mpl_connect('button_press_event', onclick)
plt.show()

字符串
首先单击左侧图形,然后单击右侧图形,生成:

Axes(0.102541,0.111557;0.385554x0.871775)
Axes(0.602541,0.111557;0.385554x0.871775)


我看到Axes的第一个属性根据我点击的图而改变:左边的是0.102541,右边的是0.602541。这个属性的名字是什么?有没有一个简单的方法来派生axs的索引,它是从event点击的?

wyyhbhjk

wyyhbhjk1#

刚刚在mpl-discord上看到你的问题,我想我会看看:-)
这里有一点关于这是如何工作的澄清:

  • event.inaxes提供触发事件的Axes对象
  • 您在打印输出中看到的4个值对应于轴的位置

leftbottomwidth x height)在相对图形坐标中)
如果你想得到axs列表中的轴的索引,你可以这样做:

import numpy as np, matplotlib.pyplot as plt

fig, axs = plt.subplots(ncols=2, nrows=1, figsize=(3.5, 2.5), layout="constrained")
axs[0].plot(np.random.rand(10))
axs[1].plot(np.random.rand(10))

axs = axs.tolist()   # convert to list so we can use .index(...) to find elements
def onclick(event):
    if event.inaxes in axs:
        print(axs.index(event.inaxes))

cid = fig.canvas.mpl_connect('button_press_event', onclick)
plt.show()

字符串
.并回答问题 *“这是什么财产的名字 *?
位置的左下角!

axs[0].get_position().x0
>>> 0.10289777777777778
axs[1].get_position().x0
>>> 0.6028977777777779

的数据

相关问题