2014-03-26 23 views
0

我想在3D平面上繪製一個小的4x4陣列。我有一個2d陣列s我預覽plt.imshow並獲得正確的4x4細胞圖像。然而,當我繪製小號X,Y,Z平面(的x,y,Ž各自爲4×4陣列),我收到了重採樣(?)的3×3單元映射到所述平面上的圖像。有沒有一種簡單的方法(有可能是...)強制plot_surface將數據點視爲已知像素大小(dx,dy,dz)的像素配準,以便將數據繪製爲4x4單元格圖像?如何在3D表面上「強制」像素註冊的網格來繪製x,y,z,s?

這是一個短期和簡單的代碼來說明我的問題:

s = np.random.rand(4,4) 
fig = plt.figure(1) 
ax = fig.add_subplot(111) 
ax.imshow(s, interpolation='nearest') 

4x4 array with imshow

x = np.array([1,1,1,1]) 
y = np.array([1,2,3,4]) 
z = y.T 

xi, yi = np.meshgrid(x, y) 
zi = z*np.ones((4,4)) 

fig = plt.figure(2) 
ax = fig.gca(projection='3d') 
color = plt.cm.jet(s) 

ax.plot_surface(xi, yi, zi, 
       rstride=1, cstride=1, 
       facecolors=color, shade=False, 
       vmin=s.min(), vmax=s.max()) 

4x4 array resampled onto a 3x3 representation

有什麼建議?

+0

'zi = z * np.ones((5,5))'出於好奇,會做什麼?在這種情況下是什麼? – Torxed

+0

's'是一些物理屬性。由於'xi','yi','zi'和's'必須具有相同的尺寸,所以製作'zi' 5x5是不夠的。 – Shahar

回答

0

所以我發現我工作的解決方案是採用DX,DY,DZ計算圍繞每個數據點的多邊形的頂點:

vx = [x-0.5*dx, x+0.5*dx, x+0.5*dx, x-0.5*dx] 
vy = [y-0.5*dy, y+0.5*dy, y+0.5*dy, y-0.5*dy] 
vz = [z-0.5*dz, z-0.5*dz, z+0.5*dz, z+0.5*dz] 

然後用Poly3DCollectionmpl_toolkits.mplot3d.art3d繪製多邊形。

我希望這可以幫助別人。

Shahar

相關問題