2017-11-01 16 views
1

상단에 컬러 막대가있는 천문 이미지를 표시하는 함수를 작성하려고합니다 (자동으로 x 축과 길이가 같음). 틱을 맨 위에 놓으려고하면 아무 것도하지 않기 때문에 문제가 발생합니다 ... 컬러 막대의 맨 아래에 틱을 유지합니다 (또한 콜바의 y 축에있는 틱) . X 축의 WCS 좌표에서 문제가 될 수 있다고 생각합니다. 투영하지 않을 때 잘 작동하기 때문에!Matplotlib 컬러 바 및 WCS 프로젝션

import numpy as np 
import matplotlib.pyplot as plt 
from astropy import wcs 
from matplotlib.colors import PowerNorm 
from mpl_toolkits.axes_grid1 import make_axes_locatable 
from matplotlib import cm 

#WCS coordinate system 
w = wcs.WCS(naxis=2) 
w.wcs.crpix = [23.5, 23.5] 
w.wcs.cdelt = np.array([-0.0035, 0.0035]) 
w.wcs.crval = [266.8451, -28.151658] 
w.wcs.ctype = ["RA---TAN", "DEC--TAN"] 
w.wcs.set_pv([(2, 1, 45.0)]) 

#generate an array as image test 
data = (np.arange(10000).reshape((100,100))) 

#display image 
fig = plt.figure() 
ax = plt.gca(projection=w) 
graf = ax.imshow(data, origin='lower', cmap=cm.viridis, norm=PowerNorm(1)) 

#colorbar 
divider = make_axes_locatable(ax) 
cax = divider.append_axes("top", size="5%") 
cbar = fig.colorbar(graf, cax=cax, orientation='horizontal') 
cax.xaxis.set_ticks_position('top') 
fig.show() 

고마워요!

+0

코드의이 대형 블록이 오히려 쓸모가 없다. 다른 사람들이 (적어도 현재 코드에서 가능한 한도까지) 그것을 실행할 수 있도록 편집하여 결과 이미지 나 멈추는 오류를 확인하십시오. – Gabriel

+0

짧게하려면 : [mcve]를 읽고 적절하게 질문을 편집하십시오. – ImportanceOfBeingErnest

+1

죄송합니다! 나는 코드를 편집했고, 지금은 검증 가능하다 !! – Mikifiori

답변

0

WCSAxes의 내부 장치를 사용하여 WCS 투영에서 진드기를 처리해야합니다. WCSAxes은 xaxis/yaxis 속성 (많이 사용하지 않는 것 같음) 대신 좌표 맵 컨테이너 (cbar.ax.coords에서 찾을 수 있음)를 통해 컬러 막대 틱을 처리합니다.

그래서, 코드를 실행 한 후, 다음과 같은 트릭은 나를 위해 일한와 xticks 최대 이동 : 우리가 그것을 실행할 수없는 경우

c_x = cbar.ax.coords['x'] 
c_x.set_ticklabel_position('t') 
cbar.update_normal(cax) 
+0

감사합니다! 하지만 이제는 컬러 바의 범위 (및 스케일)가 잘못되었음을 알았습니다. 0에서 1000 사이 여야합니다. 규범을 변경하면 규모를 변경해야하지만 ... 변경되지 않습니다! – Mikifiori

+0

글쎄, 올바른 ticklabels은'cax.xaxis'에 저장되어있는 것처럼 보입니다. 어쩌면 그저'WCSAxes' 컬러 바에 복사 할 수 있을까요? –