检测matplotlib画布上的相对鼠标位置

时间:2011-11-28 15:37:20

标签: matplotlib

我希望使用下面的 onmove 函数在matplotlib中创建自定义悬停操作。 将 x event.x 中的现有数据点值转换为另一个坐标系(如点)的最佳方法是什么,以便我可以检测event.x何时位于 p 任何数据点的点数?我知道选择器事件,但不想使用它,因为它基于点击,而不是悬停。

fig = figure()
ax1 = subplot(111)
x = linspace(0,10,11)
y = x**2
ax1.plot(x,y)
fig.canvas.mpl_connect('motion_notify_event', onmove)
p = 5

def onmove(event):
    if event.inaxes:
    #Detect if mouse was moved within p points of any value in x

1 个答案:

答案 0 :(得分:3)

我回答了related question the other day

您的“点”(或设备)坐标转换取决于x和y的原始坐标系。如果(x,y)是轴上的数据值ax,那么您可以使用ax.transData.transform_point([x, y])转换它们。如果(x,y)在轴坐标(0-1)中,那么ax.transAxes就是你所追求的。

以上收到的事件将包含xy的属性,它们将是设备(像素)坐标中的(x,y)

可以找到此信息的相关文档:http://matplotlib.sourceforge.net/users/transforms_tutorial.htmlhttp://matplotlib.sourceforge.net/users/event_handling.html

此外,艺术家(线条,补丁等)都有一个您可能感兴趣的包含方法:http://matplotlib.sourceforge.net/api/artist_api.html#matplotlib.artist.Artist.contains