2012-08-01 32 views
10

मैं matplotlib में कुछ एचडीएफ डेटा प्लॉट करने की कोशिश कर रहा हूं। h5py का उपयोग कर उन्हें आयात करने के बाद, डेटा सरणी के रूप में संग्रहीत किया जाता है, इस तरह:matplotlib - ऊंचाई की एक आयताकार सरणी से 3 डी सतह

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

इस मामले में, x और y मान, बस सरणी के क्षेत्रों में से अनुक्रमित रहे हैं, जबकि जेड मूल्य के मूल्य है विशिष्ट क्षेत्र (X, y, z) रूप में यह दिखता है:

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

और इसी तरह।

क्या इस तरह के डेटा से सतह साजिश करने का कोई आसान तरीका है? मुझे पता है कि मैं इसे सभी सरणी में पुन: स्थापित करके (x, y, z) tuples में बदल सकता हूं, लेकिन शायद इसकी आवश्यकता नहीं है?

उत्तर

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

जो उत्पन्न होगा, enter image description here

हालांकि, अगर केवल प्रासंगिक जानकारी z के मूल्यों में है, तो आप बस imshow उपयोग कर सकते हैं। यहां, z-values ​​उनके रंग द्वारा दर्शाए जाते हैं। आप इस से प्राप्त कर सकते हैं:

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

कौन सा दे देंगे,

enter image description here

+3

imshow काम किया है, धन्यवाद! मैं कम प्रतिष्ठा के कारण वोट नहीं दे सकता, लेकिन इसके बारे में याद रखूंगा :) –

संबंधित मुद्दे