2016-02-19 105 views
0

我想繪製一個簡單的3D多面體並嘗試用座標標記頂點。第一步我想要做的就是簡單地標記每個頂點與他們的訂單或1,2,...使用matplotlib繪製3d圖中的標籤點

我看到在this答案在哪裏我可以使用循環來做到這一點。但是我想知道是否有可能通過x,y,z座標列表和標籤列表,它會簡單地繪製點並標記它,可能沒有任何循環。如果存在我不知道的功能。
這是我到現在爲止

import numpy as np 
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D 
#coord = 10*np.random.rand(3,num)#num points in 3D #first axis is x, second = y, third = z 
xcod = np.array([1,2,3,2.7,2.4,1]) 
ycod = np.array([1,1,4,5.,6,1]) 
zcod = np.array([1,2,1,2,3,1]) 
#coord = np.concatenate(coord,coord[0]) 
#####plotting in 3d 
fig = plt.figure() 
ax = fig.add_subplot(111,projection = '3d') 
#plotting all the points 
ax.plot(xcod,ycod,zcod,'x-') 
#adding labels for vertice 
#ax.text(xcod,ycod,zcod,["1","2","3","4","5","6","7"]) 
#supposed centroid 
ax.scatter(np.mean(xcod),np.mean(ycod),np.mean(zcod),marker = 'o',color='g') 
ax.set_xlabel("x axis") 
ax.set_ylabel("y axis") 
ax.set_zlabel("z axis") 

plt.show() 

enter image description here

ax.text(xcod,ycod,zcod,["1","2","3","4","5","6"])沒有工作嘗試。我可以按照循環,但有另一種簡單的方法來做到這一點?

回答

2

ax.text()只將文本置於一個位置。

嘗試:

for x,y,z,i in zip(xcod,ycod,zcod,range(len(xcod))): 
    ax.text(x,y,z,i) 

那麼你得到:

enter image description here

+0

哎,是的,我這樣做,但不知道是否有可能不知道一個函數具有x的列表,y,z和一個標籤列表,基本上沒有循環 –

+0

@hadik使用循環有什麼問題嗎?對我來說似乎相當緊湊。 –

+0

這很好,但我想知道是否有其他內置函數直接執行它。感謝您的回覆 :) –