2013-03-29 68 views
4

這是一個奇怪的,希望有人能幫助我。我試圖用matplotlib熱圖做一個我的數據密度圖,但不知怎的,我的數據以一種奇怪的方式被顛倒/旋轉。我有一個散點圖,然後我將這些點分類爲密度,但圖像根本不是應該出現的。例如,這裏是原來的散點圖,其中有正確的方向:matplotlib熱圖反轉數據?

original scatter plot

然後這裏是我的熱圖(注意,該結構是從上面逆時針旋轉90度,但該軸的數據是正確的.. 。在軸上的數字,從數據自動生成的,所以如果你簡單地恢復圖像出來正確的軸,但數字都是關閉):

heatmap with wrong orientation, but correct axes

我只是不明白這是如何可能是,因爲數據解析例程i與我剛剛生成散點圖時的結果完全相同。我認爲它必須是熱圖圖形編碼的方式,但我不知道細分的位置。我已經嘗試考慮熱圖的內置原點位置(左上角),但沒有解決這個問題。代碼如下(首先是所有的數據解析):

import numpy as np 
from numpy import ndarray 
import matplotlib.pyplot as plt 
import matplotlib 
import atpy 
from pylab import * 

twomass = atpy.Table() 

twomass.read('/Raw_Data/IRSA_downloads/2MASS_GCbox2.tbl') 


hmag = list([twomass['h_m']]) 
jmag = list([twomass['j_m']]) 
hmag = np.array(hmag) 
jmag = np.array(jmag) 
colorjh = np.array(jmag - hmag) 

idx_c = (colorjh > -1) & (colorjh < 6) #manipulate desired color quantities here 
idx_h = (hmag > 8) & (hmag < 18) 
idx = idx_c & idx_h 

現在,這裏的熱圖碼:

heatmap, xedges, yedges = np.histogram2d(colorjh[idx], hmag[idx], bins=500) 
extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]] 

plt.clf() 
plt.imshow(heatmap, extent=extent) 

plt.xlabel('Color(J-H)', fontsize=15)   #adjust axis labels here 
plt.ylabel('Magnitude (H)', fontsize=15) 

plt.gca().invert_yaxis() 

plt.legend(loc=2) 
plt.title('CMD for Galactic Center (2MASS)', fontsize=20) 
plt.grid(True) 
plt.show() 

我是很新,Python的,所以少jargony的解釋,越我可能會很好地使用它。謝謝你們可以提供的任何幫助。

回答

7

你的問題似乎與np.histogram2d的工作方式。從documentation

請注意,直方圖不遵循其中X值的橫座標和笛卡爾公約Ÿ在縱軸上值。而是沿着陣列的第一維(垂直)以及沿着陣列的第二維(水平)的直方圖來編排x。這確保了與histogramdd的兼容性。

使用

extent = [yedges[0], yedges[-1], xedges[-1], xedges[0]] 

,而不是應該給你你所期望的。如果要保持與散點圖相同的方向,請在histogram2d調用中反轉colorjh[idx]hmag[idx]

+0

這就是訣竅!非常感謝。 (對於後人,我會注意到plt.gca()。invert_yaxis()代碼不再是必需的,因爲經過修改的'範圍'編碼確實反轉了軸。 – Teachey