2012-08-01 3 views
10

Ich versuche, einige HDF-Daten in Matplotlib zu plotten. Nach dem Import mit ihnen h5py, werden die Daten in einer Form von Arrays gespeichert ist, wie folgt aus:matplotlib - 3D-Oberfläche aus einem rechteckigen Array von Höhen

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

In diesem Fall sind x und y Werte nur die Indizes der Arrays Felder sind, während Z-Wert ist der Wert von spezifisches Feld. In der (x, y, z) -Form würde es wie folgt aussehen:

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

und so weiter.

Gibt es eine einfache Möglichkeit, ein Oberflächenplot aus dieser Art von Daten zu erstellen? Ich weiß, dass ich dies zu (x, y, z) Tupeln ändern kann, indem ich über das ganze Array iteriere, aber vielleicht wird es nicht benötigt?

Antwort

28

Wenn Sie ein 3D-Oberflächendiagramm möchten, müssen Sie zuerst das meshgrid erstellen. Sie können versuchen:

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

, die generieren, enter image description here

Wenn jedoch die einzigen relevanten Informationen in dem z-Werten sind, können Sie einfach imshow verwenden können. Hier werden Z-Werte durch ihre Farbe dargestellt. Sie können diese durch erreichen:

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

Welche geben,

enter image description here

+3

imshow hat seinen Zweck erfüllt, danke! Ich kann wegen des schlechten Rufes nicht abstimmen, werde mich aber daran erinnern :) –