2016-06-15 1 views
1

저는 최근에 healpy를 사용하기 시작했습니다. 서브 맵에 내 맵을 포함시키는 방법을 알아낼 수 없습니다. 나는 시간의 함수로서 행성의 열 방출 맵을 가지고 있으며, 나는 시간이 지남에 따라 여러 번 (9 개의 다른 시간을 말함) 그것을보고 행성이 올바른 방향으로 회전하고 있는지 확인하기 위해 일부 좌표를 중첩해야한다.Healpy 플로팅 : healpy.mollview 투영법을 사용하여 서브 플로트로 그림을 만드는 방법은 무엇입니까?

지금까지 2 가지를 할 수 있습니다.

  1. 중첩 된 좌표로 9 가지 다른 숫자를 만듭니다.
  2. 9 개의 다른 맵을 포함하는 9 개의 서브 플로팅으로 그림을 만들지 만, 시간에 적합한 맵 대신 내 모든 서브 플로트에 모든 좌표를 덧붙입니다.

매우 간단한 문제인지는 모르겠지만 나를 미치게 만들었고 작동하지 않는 항목이 있습니다.

내가 무슨 뜻인지 보여 드리죠 :

옵션 1 :

Flux map superimposed with some stars at time = t

하지만 난이 필요

import healpy as hp 
import matplolib.pyplot as plt 





MAX = 10**(23) 
MIN = 10**10 

for i in range(9): 
    t = 4000+10*i 

    hp.visufunc.mollview(Fmap_wvpix[t,:], 
         title = "Map at t="+str(t), min = MIN, max=MAX)) 

    hp.visufunc.projplot(d[t,np.where(np.abs(d[t,:,2]-SSP[t])<0.5),1 ], 
         d[t,np.where(np.abs(d[t,:,2]-SSP[t])<0.5),2], 
         'k*',markersize = 6) 

    hp.visufunc.projplot(d[t,np.where(np.abs(d[t,:,2]-(SOP[t]))<0.2),1 ], 
         d[t,np.where(np.abs(d[t,:,2]-(SOP[t]))<0.2),2], 
         'r*',markersize = 6) 

이이처럼 꽤 많이 보이는 9 개 수치를 만드는을 그들 중 많은 수가 이미지처럼 보이는 9 개의 서브 플롯을 포함하는 이미지를 만들고 싶습니다.

옵션 2 :

fig = plt.figure(figsize = (10,8)) 

for i in range(9): 
    t = 4000+10*i 

    hp.visufunc.mollview(Fmap_wvpix[t,:], 
         title = "Map at t="+str(t), min = MIN, max=MAX, 
         sub = int('33'+str(i+1))) 


    hp.visufunc.projplot(d[t,np.where(np.abs(d[t,:,2]-SSP[t])<0.5),1 ], 
         d[t,np.where(np.abs(d[t,:,2]-SSP[t])<0.5),2], 
         'k*',markersize = 6) 

    hp.visufunc.projplot(d[t,np.where(np.abs(d[t,:,2]-(SOP[t]))<0.2),1 ], 
         d[t,np.where(np.abs(d[t,:,2]-(SOP[t]))<0.2),2], 
         'r*',markersize = 6) 

이 나에게 줄거리를 제공하지만 내 줄거리의 모든의 모든 projplot의 별을 그립니다!

Subplots with too many stars

내가 = t 매핑하고 적절한지도 = t 시간 동안 별을 그리는 시간이 축를 호출 할 수있는 방법이 필요하다는 것을 알고있다 (아래 이미지 참조),하지만 난 모든했습니다 지금까지 시도한 것은 실패했습니다. 나는 주로 matplotlib 축을 정의하고 그것에 별을 그릴 수 있다고 생각하는 projaxes를 사용하려고 시도했지만 작동하지 않습니다. 어떤 충고?

또한지도에서 일부 선을 그리기를 원하지만 그 중 하나를 수행하는 방법을 파악할 수 없습니다. 설명서에는 projplot이 표시되어 있지만 표식을 원한다고 말하지 않으면 아무 것도 그려지지 않습니다.

추신 : 내 배열이없는 경우이 코드는 작동하지 않으므로 아마도 쓸모가 없습니다.

import numpy as np 
import healpy as hp 
import matplotlib.pyplot as plt 


NSIDE = 8 
m = np.arange(hp.nside2npix(NSIDE))*1 


MAX = 900 
MIN = 0 


fig = plt.figure(figsize = (10,8)) 
for i in range(9): 
    t = 4000+10*i 

    hp.visufunc.mollview(m+100*i, title = "Map at t="+str(t), min = MIN, max=MAX, 
         sub = int('33'+str(i+1))) 

    hp.visufunc.projplot(1.5,0+30*i, 'k*',markersize = 16) 

그래서 이것은 나에게 각 프레임 별 하나를 주기로하고 스타가 이동하도록되어 : 여기에 실행해야합니다 간단한 버전입니다. 그러나 대신 모든 프레임에 모든 별을 그립니다.

어떻게해야합니까? 나는 문서를 이해하지 못한다.

답변

0

방금이 문제에 대한 해결책을 찾고 있지만 mollview (here)의 설명서에서 문제를 발견했습니다.

눈치 챘을 때 'sub'는 (matplotlib의) function subplot과 동일한 구문을 수신했다고합니다. 이 형식은 다음과 같습니다.

(# of rows, # of columns, # of current subplot) 

예 : 당신의 계획을 만들기 위해서, 각 반복에서 값 서브가 원하는 것은

sub=(3,3,i) 

여기서 i는 1에서 9 (3 * 3)까지입니다.

이 코드는 저에게 효과적입니다. 코드에서이 코드를 시도하지는 않았지만 작동해야합니다.

희망이 도움이됩니다.

0

healpy 플롯을 matplotlib 개의 서브 플로트에 넣으려면 다음과 같은 방법이 있습니다. 핵심은 plt.axes()을 사용하여 활성 서브 플로트를 선택하고 healpy 함수에 hold=True 키워드를 사용하는 것입니다.

import healpy as hp 
import numpy as np 
import matplotlib.pyplot as plt 

fig, (ax1, ax2) = plt.subplots(ncols=2) 

plt.axes(ax1) 
hp.mollview(np.random.random(hp.nside2npix(32)), hold=True) 

plt.axes(ax2) 
hp.mollview(np.arange(hp.nside2npix(32)), hold=True) 

enter image description here