2016-06-15 57 views
1

我刚刚开始尝试使用healpy,我无法弄清楚如何使subplots包含我的地图。我有一个行星的热辐射图作为时间的函数,我需要在几个时刻(可以说9个不同的时间)看到它并叠加一些坐标,以检查我的星球是否正确旋转。Healpy plotting:如何使用healpy.mollview投影来绘制子图的图形?

到目前为止,我可以做2件事。

  1. 制作9种不同的数字与叠加坐标。
  2. 制作一个包含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星! (见下图)

Subplots with too many stars

我知道,我需要一种方法来调用具有时间轴= T映象并绘制星,时间合适的地图上= T,但是我什么都至今尝试失败。我主要试图使用projaxes思考我可以定义一个matplotlib轴,并绘制星星,但它不工作。有什么建议?

另外,我想提醒我的地图部分线路很好,但我无法弄清楚如何做到这一点无论是。该文件说projplot但它不会画任何,如果我不告诉它我想要一个标记。

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) 

所以这应该给我一个星星为每个帧和明星应该是移动。但是,它正在绘制所有框架上的所有星星。

我该怎么办?我不明白这些文件。

回答

0

我刚刚遇到这个问题寻找解决同样的问题,而是设法从mollview(here)的文件中找到它。

正如你在那里注意到的那样,他们说'sub'收到了与函数子图(从matplotlib)相同的语法。这种格式是:

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

例如,为了使你的阴谋,价值分想要在每次迭代接收是

sub=(3,3,i) 

我在哪里运行从1到9(3 * 3)。

这对我有用,我没有试过这个与你的代码,但应该工作。

希望这会有所帮助!

0

如果你想在matplotlib子图上有healpy的地块,那么下面的路线是可行的。的关键是使用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