我希望使用下面的 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
答案 0 :(得分:3)
我回答了related question the other day。
您的“点”(或设备)坐标转换取决于x和y的原始坐标系。如果(x,y)是轴上的数据值ax
,那么您可以使用ax.transData.transform_point([x, y])
转换它们。如果(x,y)在轴坐标(0-1)中,那么ax.transAxes
就是你所追求的。
以上收到的事件将包含x
和y
的属性,它们将是设备(像素)坐标中的(x,y)
可以找到此信息的相关文档:http://matplotlib.sourceforge.net/users/transforms_tutorial.html 和 http://matplotlib.sourceforge.net/users/event_handling.html
此外,艺术家(线条,补丁等)都有一个您可能感兴趣的包含方法:http://matplotlib.sourceforge.net/api/artist_api.html#matplotlib.artist.Artist.contains。