matplotlib 确定按钮点击的子图

yuvru6vn  于 2023-10-24  发布在  其他
关注(0)|答案(2)|浏览(130)

给定一个有多个图的图,是否有一种方法来确定鼠标按钮点击了其中的哪一个?
例如

  1. fig = plt.figure()
  2. ax = fig.add_subplot(121)
  3. ax.imshow(imsp0)
  4. ax = fig.add_subplot(122)
  5. ax.imshow(imsp1)
  6. fig.canvas.mpl_connect("button_press_event",onclick_select)
  7. def onclick_select(event):
  8. ... do something depending on the clicked subplot
c86crjj0

c86crjj01#

如果保留两个轴的句柄,则可以只查询发生单击的轴;例如if event.inaxes == ax:

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. imsp0 = np.random.rand(10,10)
  4. imsp1 = np.random.rand(10,10)
  5. fig = plt.figure()
  6. ax = fig.add_subplot(121)
  7. ax.imshow(imsp0)
  8. ax2 = fig.add_subplot(122)
  9. ax2.imshow(imsp1)
  10. def onclick_select(event):
  11. if event.inaxes == ax:
  12. print ("event in ax")
  13. elif event.inaxes == ax2:
  14. print ("event in ax2")
  15. fig.canvas.mpl_connect("button_press_event",onclick_select)
  16. plt.show()
展开查看全部
gwbalxhn

gwbalxhn2#

这至少可以通过应用以下步骤来实现:

  • onclick事件具有属性xy,它们携带从图的角开始的像素坐标
  • 这些坐标可以通过使用fig.transFigure.inverted().transform((x,y))转换成图形坐标
  • 你可以通过bb=ax.get_position()得到每个子图的边界框
  • 遍历图像的所有子图(轴)
  • 你可以通过bb.contains(fx,fy)测试点击是否在这个边界框的区域内,其中fxfy是转换成图像位置的按钮点击坐标

有关onclick事件的更多信息:http://matplotlib.org/users/event_handling.html有关坐标转换的更多信息:http://matplotlib.org/users/transforms_tutorial.html

相关问题