2012-05-03 72 views
6

我使用mplo3d繪製一系列點:如何獲取mplot3d中拾取對象的屬性(matplotlib + python)?

import pylab as p 
import mpl_toolkits.mplot3d.axes3d as p3 

fig=p.figure() 
ax = fig.add_subplot(111, projection='3d') 

ax.scatter([1], [0], [0], c='r', marker='^', picker=5) 
ax.scatter([0], [1], [0], c='g', marker='^', picker=5) 
ax.scatter([0], [0], [1], c='b', marker='^', picker=5) 

,然後我添加了一個選擇器功能:

def onpick(event): 
    ind = event.ind 
    print ind 

fig.canvas.mpl_connect('pick_event', onpick) 

終於繪製它:

p.show() 

有沒有一種方式從點擊標記獲取3D座標? 到目前爲止,我可以得到我的ax.scatter()使用列表中的點的指數,但 這不會削減它,因爲我用ax.scatter很多次,這已經是這個樣子(我用不同的顏色例如)

問候

回答

8

可以使用_offsets3d event.artist的屬性得到的座標數據,然後用IND來獲得拾取點:

def onpick(event): 
    ind = event.ind[0] 
    x, y, z = event.artist._offsets3d 
    print x[ind], y[ind], z[ind] 
+0

它的工作原理!非常感謝。 – user1371437

+0

謝謝,這個作品!!!! – Tom