Я только недавно начал пытаться использовать healpy, и я не могу понять, как заставить подзаголовки содержать мои карты. У меня есть карта теплового излучения планеты как функция времени, и мне нужно смотреть на нее в несколько моментов времени (скажем, 9 раз) и накладывать некоторые координаты, чтобы проверить, что моя планета вращается правильно.Healpy plotting: Как сделать фигуру с подзаголовками, используя проекцию healpy.mollview?
До сих пор я могу сделать 2 вещи.
- Сделайте 9 разных фигур с наложенными координатами.
- Сделайте цифру с 9 подзаголовками, содержащими 9 разных карт, но накладывающую все мои координаты на все мои подзадачи, а не только соответствующие времени.
Я не уверен, что это очень простая проблема, но это сводит меня с ума, и я не могу найти что-нибудь, что работает.
Я покажу вам, что я имею в виду:
ВАРИАНТ 1:
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 цифр, которые выглядят довольно много, как это:
Flux map superimposed with some stars at time = t
Но мне нужно многие из них, поэтому я хочу сделать изображение, которое содержит 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 звезды на все мой сюжетных! (См изображения)
Я знаю, что я нужен способ вызова осей, что имеет время = т карту и рисовать звезды времени = т на соответствующей карте, но все, что я имею до сих пор не удалось. Я в основном пытался использовать projaxes, думая, что могу определить оси matplotlib и нарисовать на нем звезды, но он не работает. Любой совет?
Кроме того, я хотел бы нарисовать некоторые строки на моей карте, но я не могу понять, как это сделать. Документация говорит projplot, но он не будет рисовать anyting, если я не говорю, что я хочу маркер.
PS: Этот код, вероятно, бесполезен для вас, так как он не будет работать, если у вас нет моих массивов. Вот более простой вариант, который должен работать:
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)
Так это должно дать мне одну звезду для каждого кадра и звезда должна двигаться. Но вместо этого он рисует все звезды на всех кадрах.
Что я могу сделать? Я не понимаю документацию.