matplotlib – superficie 3d desde una matriz rectangular de alturas

Estoy tratando de trazar algunos datos HDF en matplotlib. Después de importarlos usando h5py, los datos se almacenan en una forma de matriz, como esta:

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

En este caso, los valores de x e y son solo los índices de los campos de la matriz, mientras que el valor de z es el valor del campo específico. En la forma (x, y, z) se vería así:

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

y así.

¿Hay una manera fácil de hacer una gráfica de superficie a partir de este tipo de datos? Sé que puedo cambiar esto a (x, y, z) tuplas iterando por toda la matriz, pero ¿quizás no sea necesario?

Si desea un trazado de superficie en meshgrid primero debe crear la meshgrid . Puedes probar:

 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á, introduzca la descripción de la imagen aquí

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

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

Que dará,

introduzca la descripción de la imagen aquí