2016-06-10 97 views
4

我已經提到了matplotlib.org和很多線程,但是我不能繪製3d表面。我可以繪製一個三維散點圖,但只要我嘗試繪製一個三維表面,就會發現很多不同的錯誤。我修復錯誤,但我得到新的。經過2天的戰鬥,我相信我對matplotlib 3D表面的理解是錯誤的。matplotlib中的3d表面

我想繪製SA,FZ,FY

其中SA是X,FZ是Y,FY爲Z

while y<Last_Row: 
    if 100 < Temp_AVG_Dict[y] and Temp_AVG_Dict[y] < 140 and abs(Camber[y])<5 and 24.5<Speed[y] and Speed[y]<25.5: 
     y = y + 1 

     SA[SArow:]=[Run_50_sheet.cell_value(y , SA_Column)] 
     SArow = SArow + 1 

     FY[FYrow:] = [Run_50_sheet.cell_value(y , FY_Column)] 
     FYrow = FYrow + 1 

     FZ[FZrow:] = [Run_50_sheet.cell_value(y , FZ_Column)] 
     FZrow = FZrow + 1 

     Z.insert(SArow,[SA[SArow-1], FZ[FZrow-1], FY[FYrow-1]]) 

    else: 
     y=y+1 

Z= np.array(Z) 


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

下面這條線,我相信,我錯了。 X,Y,Z都需要二維數組,但是不確定需要輸入的值。

我試着按[SA,FZ],[FZ,FY]和[SA,FY]的順序製作2D陣列,但是失敗了 我也試着讓SA和FY等於1..n,也沒有工作。

ax.plot_surface(SA, FY ,Z) 
plt.show() 

2d數組應該由什麼值組成? 任何幫助表示讚賞。

回答

2

看三維表面這個例子代碼:http://matplotlib.org/examples/mplot3d/surface3d_demo.html

首先,你必須創建兩個規則網格X和Y(二維數組)與plot_surface繪製,喜歡這裏:

X = np.arange(-5, 5, 0.25) # X, Y are 1d arrays 
Y = np.arange(-5, 5, 0.25) 
X, Y = np.meshgrid(X, Y) # Now X, Y are 2d arrays 

試着讓你的一維數組FA的網格(如果是X),FY(如果是Y):

X, Y = np.meshgrid(FA, FY) 

然後,CRE吃其表示表面的值的二維數組Z,即

Z = np.sin(np.sqrt(X**2 + Y**2)) 

FZ陣列具有爲2d和具有相同的形狀X, Y陣列。

劇情後:

ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm, 
         linewidth=0, antialiased=False) 

enter image description here

如果網格網格是不規整,尋找plot_trisurfhttp://matplotlib.org/examples/mplot3d/trisurf3d_demo.html

+0

不ž需要是X和Y的函數,比如上例中?我的Z值來自一個數據集,所以我不能爲它寫一個函數 – HarleyH

+0

不,在我的例子中'Z'是一個二維數組,它與X和Y的形狀相同。您可以像'z [0,0 ] =。5'等 – Serenity

+0

謝謝斯坦利我把它繪製成3D!我現在遇到的問題是,圖形是4個或5個獨立的平面,並且在xy軸上有一個平面。我期待這樣做,因爲我使Z數組除了由座標X,Y修改的所有零值之外。是否有插值某種類型值的方法?我試過trisurf方法,但圖書館沒有正確加載。如果我說的話很難看清,我明天早上會發布一張圖片,當我拿到電腦充電器時。 – HarleyH