2012-08-01 7 views
10

matplotlib에서 일부 HDF 데이터를 플롯하려고합니다. h5py 사용하여 가져온 후, 데이터는 다음과 같이 어레이의 형태로 저장된다matplotlib - 고 직사각형 배열의 3 차원 표면

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

Z 값의 값이 때, x 및 y 값은 상기 어레이의 필드 중 단지 인덱스이다 특정 필드. (x, y, z) 형식에서는 다음과 같이 보입니다.

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

등등.

이런 종류의 데이터에서 표면 플롯을 쉽게 만들 수 있습니까? 배열 전체를 반복하여 (x, y, z) 튜플로 바꿀 수 있다는 것을 알고 있지만 필요하지 않을 수도 있습니다.

답변

28

3 차원 표면 플롯을 원하면 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() 

을, 유일한 관련 정보의 z 값에있는 경우 enter image description here

그러나, 당신은 단순히 imshow를 사용할 수 있습니다. 여기에서 z 값은 색상으로 표시됩니다. 당신이에 의해 얻을 수 있습니다

im = plt.imshow(Z, cmap='hot') 
plt.colorbar(im, orientation='horizontal') 
plt.show() 

줄 것이다,

enter image description here

+3

imshow이 일을했다가, 감사합니다! 나는 낮은 평판 때문에 투표 할 수는 없지만 그것에 대해 기억할 것입니다 :) –