2012-08-01 71 views
10

我想繪製matplotlib中的一些HDF數據。使用h5py導入它們之後,將數據存儲在陣列的形式,如下所示:matplotlib - 矩陣高度的3d表面

array([[151, 176, 178], 
     [121, 137, 130], 
     [120, 125, 126]) 

在這種情況下,x和y的值是數組的字段的只是索引,而z值的值特定領域。在(x,y,z)形式中,它看起來像:

(1,1,151) 
(2,1,176) 
(3,1,178) 
(1,2,121) 
... 

等等。

有沒有一種簡單的方法來從這種數據做曲面圖?我知道我可以通過遍歷整個數組來改變它爲(x,y,z)元組,但也許它不是必需的?

回答

28

如果你想要一個三維表面圖,你必須先創建meshgrid。你可以試試:

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
import numpy as np 

X = np.arange(1, 10) 
Y = np.arange(1, 10) 
X, Y = np.meshgrid(X, Y) 
R = np.sqrt(X**2 + Y**2) 
Z = np.sin(R) 
fig = plt.figure() 
ax = fig.gca(projection='3d') 
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='hot', linewidth=0, antialiased=False) 
ax.set_zlim(-1.01, 1.01) 

fig.colorbar(surf, shrink=0.5, aspect=5) 
plt.show() 

這將產生, enter image description here

然而,如果唯一的相關信息是在z值,你可以簡單地使用imshow。這裏,z值由它們的顏色表示。你可以做到這一點的:

​​

哪位能給,

enter image description here

+3

imshow做的工作,謝謝!由於名譽低,我不能投票,但會記住它:) – 2012-08-02 17:15:59