2013-03-29 3 views
4

이것은 이상한 것입니다. 누군가 나를 도울 수 있기를 바랍니다. matplotlib 히트 맵을 사용하여 데이터의 밀도 플롯을 만들려고 시도하고 있지만 어떻게 든 내 데이터가 반전/이상한 방식으로 회전합니다. 나는 산점도를 가지고 있는데 밀도를 위해 그 점들을 비닝하고 있지만 이미지는 전혀 나오지 않아야합니다. 예를 들어, 여기에서 정확한 배향을 갖는 원래 산점도, 같습니다matplotlib 히트 맵 데이터 반전?

original scatter plot

여기에 내 히트 맵은 구조 위에서 90도 반 시계 방향으로 회전된다 (통지 야하지만 축 데이터가 올바른지 .. . 축에있는 번호) 단순히 사진이 제대로 나오는 축 반전, 그래서 만약 데이터에서 자동으로 생성하지만 숫자는 모두 꺼져 있습니다 : 난 그냥 어떻게 볼 수 없습니다

heatmap with wrong orientation, but correct axes

데이터 파싱 루틴이 내가 산산이 음모를 만들었던 때와 똑같습니다. 히트 맵 음모가 코드화 된 방식으로 이루어져야한다고 생각합니다. 그러나 고장이 어디에 있는지는 알 수 없습니다. 난 이미 히트 맵에 대한 내장 원점 배치 (왼쪽 위 모서리)에 대한 설명을 시도했지만 해결되지는 않았습니다.

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

내가, 파이썬에 아주 새로운 해요이 더 설명 덜 jargony 때문에 아마 나는 그것을 잘 사용할 수있을 것이다. 다들 도움을 주셔서 감사합니다.

답변

7

문제는 np.histogram2d의 작동 방식 인 것으로 보입니다. documentation에서 :

히스토그램이 직교 X 값이 abcissa에있는 컨벤션 을 따르지 않음을 유의하시기 바랍니다 y를 세로축에 값. 오히려 x은 배열의 첫 번째 차원 (세로)을 따라 히스토그램이며, y은 배열의 두 번째 차원 (수평)을 따라 히스토그램입니다. 이렇게하면 histogramdd과의 호환성이 보장됩니다.

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

대신 당신이 기대하는 무엇을 제공해야 사용

. 산란계와 같은 방향을 유지하려는 경우에도 histogram2d 전화에서 colorjh[idx]hmag[idx]을 반대로 전환하십시오.

+0

그건 속임수입니다! 정말 고마워. (후자의 경우, 수정 된 'extent'코딩이 축 반전을 수행하므로 plt.gca(). invert_yaxis() 코드가 더 이상 필요하지 않습니다. – Teachey