2013-03-29 36 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