2017-07-19 34 views
0

序言:我看到these,但我不能回答弄清楚怎麼做的情節。另外,我是新的python和matplotlib。從3D數據到顏色表

我具有形式

X  Y  Z 
0.05  1  z 
0.10  1  z 
...  ...  ... 
0.95  1  z 
0.05  2  z 
...  ...  ... 
...  ...  ... 
0.95 10  z 

其中z在[-0.02:0.5]的數據文件爲每個。這些結果在190(x,y,z)點。

我採集數據以這種方式

data_file = open('tau.txt', 'r') 
buffer = data_file.read() 
data_file.close() 

data = [map(float, row.split('\t')) for row 
     buffer.strip().split("\n")] 

爲紐帶建議,我將它們轉換成電網

mu = [] 
alpha = [] 
tau = [] 

for elements in data: 
    mu.append(elements[0]) 
    alpha.append(elements[1]) 
    tau.append(elements[2]) 

x_data = np.asarray(mu) 
y_data = np.asarray(alpha) 
z_data = np.asarray(tau) 

xi = np.linspace(0.05,0.95,19) 
yi = np.linspace(1,10,10) 
ar = griddata(x_data,y_data,z_data,xi,yi,interp='nn') 

然後我做的情節:謹以此使每個( x,y)座標有一個以座標爲中心的正方形,顏色條顯示z值。

cmap = mpl.colors.LinearSegmentedColormap.from_list('my_colormap', 
      ['white','grey','black'],256) 

img = plt.imshow(ar,interpolation='nearest',cmap = 
      cmap,origin='lower') 

plt.colorbar(img,cmap=cmap) 

我獲得此:this

首先,我想colourbar是情節本身的高度相同。我無法理解如何避免這種垃圾。

而且,如果你看一下文件,你立即看到範圍是不對的:X必須在[0.05 0.95]和y [1:10]。 y簡單地移位1(白線,所有的z = 0應該是對於y = 1而不是y = 0),而x假定值我不明白。

我這是必須注意的是,除了這些,情節是正確的,無論是在z值和趨勢。

我該如何解決我的問題?

+0

@ImportanceOfBeingErnest是這個問題的一個重複,請問我可以鏈接到答案? –

+0

在閱讀兩個重複的問題之後,究竟有什麼尚不清楚? – ImportanceOfBeingErnest

+0

對不起,我先評論。當你回答我的評論時,我看到了答案的鏈接。現在一切都很好! –

回答

0

imshow是相當用於繪製使用網格尺寸相同的矩陣或圖像的圖像和矩陣。這就是爲什麼你的X軸和Y軸是這樣。

對於您正在嘗試使用pcolormeshpcolor 與numpy.meshgrid結合使用以獲得正確的x和y間距。

這些功能也應該支持非規則網格間距。

This page有它是如何工作的一些信息。