2012-08-01 15 views
10

Matplotlib'de bazı HDF verilerini çizmeye çalışıyorum. h5py kullanarak içe sonra veriler, bu gibi dizi bir biçimde depolanır:matplotlib - dikdörtgen bir dizi yükseklikten 3 boyutlu yüzey

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

z değeri değeri ise, x ve y değerleri, dizinin alanlarının sadece indeksleri vardır belirli alan. böylece

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

ve: (x, y, z) 'de bu gibi görünür oluşturur.

Bu tür verilerden yüzey çizimi yapmak için kolay bir yol var mı? Bunu dizinin her yerinde yineleyerek (x, y, z) tupl'lere değiştirebileceğimi biliyorum, ama belki buna gerek yok mu?

cevap

28

3 boyutlu yüzey grafiği istiyorsanız, önce meshgrid ürününü oluşturmanız gerekir. Sen deneyebilirsiniz: üretecektir

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

, sadece ilgili bilgiler z değerleri ise enter image description here

Ancak, sadece imshow kullanabilirsiniz. Burada, z değerleri renklerine göre temsil edilir. Bu ederek elde edebilirsiniz:

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

verecektir

enter image description here

+3

imshow iş yaptı, teşekkür ederim! Düşük itibar nedeniyle oy kullanamam ama bunu hatırlayacağım :) –