2012-08-01 33 views
10

Estoy intentando trazar algunos datos HDF en matplotlib. Después de importar ellos utilizando h5py, los datos se almacenan en una forma de matriz, como esto:matplotlib: superficie en 3D de una matriz rectangular de alturas

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

En este caso, X e Y los valores son sólo los índices de los campos de la matriz, mientras que el valor z es el valor de campo especifico. En la forma (x, y, z) se vería así:

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

y así sucesivamente.

¿Existe una manera fácil de hacer un diagrama de superficie a partir de este tipo de datos? Sé que puedo cambiar esto a (x, y, z) tuplas al iterar por todo el conjunto, pero tal vez no sea necesario?

Respuesta

28

Si quiere un plano de superficie tridimensional, primero debe crear el meshgrid. Usted puede tratar de:

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() 

que generará, enter image description here

Sin embargo, si la única información relevante está en los valores z, puede simplemente usar imshow. Aquí, los valores z están representados por su color. Esto se puede conseguir por:

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

lo que le dará,

enter image description here

+3

imshow hizo el trabajo, gracias! No puedo votar debido a la baja reputación, pero lo recordaré :) –

Cuestiones relacionadas