2011-11-28 85 views
5

我希望在matplotlib中使用下面的移動函數創建自定義懸停動作。 什麼是Xevent.x到另一個座標系轉換現有的數據點值,例如點,這樣我可以檢測何時event.x是p範圍內的任何數據點的點的最佳方式?我知道picker事件,但不想使用它,因爲它基於點擊而不是懸停。在matplotlib畫布上檢測相對鼠標位置

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 

回答

3

我回答了related question the other day

您的「點」(或設備)座標轉換取決於x和y的原始座標系。如果(x,y)是軸上的數據值,則可以使用ax.transData.transform_point([x, y])將它們轉換爲ax。如果(x,y)在座標軸上(0-1),那麼ax.transAxes就是你所追求的。

該onmove接收將在裝置的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