Python matplotlib热图反转数据?

Python matplotlib热图反转数据?,python,numpy,matplotlib,heatmap,astronomy,Python,Numpy,Matplotlib,Heatmap,Astronomy,这是一个奇怪的,希望有人能帮助我。我试图用matplotlib热图绘制数据的密度图,但不知何故,我的数据以一种奇怪的方式反转/旋转。我有一个散点图,然后我将这些点合并为密度,但图像根本不是应该出来的。例如,这是原始散点图,其方向正确: 然后这是我的热图(请注意,结构从上方逆时针旋转90度,但轴数据是正确的…轴上的数字是根据数据自动生成的,因此,如果您只是简单地反转轴,图片会正确显示,但数字都是关闭的): 我只是看不出这是怎么回事,因为数据解析例程与我刚才生成散点图时完全相同。我想这一定是热图

这是一个奇怪的,希望有人能帮助我。我试图用matplotlib热图绘制数据的密度图,但不知何故,我的数据以一种奇怪的方式反转/旋转。我有一个散点图,然后我将这些点合并为密度,但图像根本不是应该出来的。例如,这是原始散点图,其方向正确:

然后这是我的热图(请注意,结构从上方逆时针旋转90度,但轴数据是正确的…轴上的数字是根据数据自动生成的,因此,如果您只是简单地反转轴,图片会正确显示,但数字都是关闭的):

我只是看不出这是怎么回事,因为数据解析例程与我刚才生成散点图时完全相同。我想这一定是热图的编码方式,但我看不出故障可能在哪里。我已经试过考虑热图的内置原点位置(左上角),但没有解决这个问题。代码如下(首先是所有数据解析):


我对Python非常陌生,所以解释中的行话越少,我就越有可能很好地使用它。感谢大家提供的帮助。

您的问题似乎与
np.historogram2d
的工作方式有关。从:

请注意,直方图不遵循笛卡尔约定,其中x值位于abcissa上,y值位于纵轴上。相反,x是沿阵列的第一维(垂直)进行历史编程的,y是沿阵列的第二维(水平)进行历史编程的。这确保了与
historogramdd
的兼容性

使用


相反,你应该给你你所期望的。如果您想保持散点图的方向不变,请在
historogram2d
调用中反转
colorjh[idx]
hmag[idx]

这就成功了!非常感谢。(对于后代,我将注意到plt.gca().invert_yaxis()代码不再是必需的,因为修改后的“区段”编码会进行轴反转。
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()
extent = [yedges[0], yedges[-1], xedges[-1], xedges[0]]