gpt4 book ai didi

axes - Healpy 绘图 : How do i make a figure with subplots using the healpy. mollview 投影?

转载 作者:行者123 更新时间:2023-12-05 01:19:44 25 4
gpt4 key购买 nike

我最近才开始尝试使用 healpy,但我不知道如何制作子图来包含我的 map 。我有一个行星的热发射图作为时间的函数,我需要在几个时刻(比如 9 个不同的时间)及时查看它并叠加一些坐标,以检查我的行星是否以正确的方式旋转。

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

  1. 用叠加的坐标制作 9 个不同的图形。
  2. 制作一个包含 9 个子图的图形,其中包含 9 个不同的 map ,但是它将我所有的坐标叠加在我所有的子图中,而不仅仅是时间适当的。

我不确定这是否是一个非常简单的问题,但它一直让我发疯,我找不到任何可行的方法。

我会告诉你我的意思:

选项 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

我知道我需要一种方法来调用具有 time = t map 的轴并在适当的 map 上绘制 time = t 的星星,但到目前为止我尝试的一切都失败了。我主要尝试使用 projaxes,认为我可以定义一个 matplotlib 轴并在其上绘制星星,但它不起作用。有什么建议吗?

此外,我也想在我的 map 上画一些线,但我也不知道该怎么做。该文档说 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)

所以这应该为每一帧给我一颗星,并且这颗星应该在移动。但它会在所有帧上绘制所有星星。

我能做什么?我不明白文档。

最佳答案

如果你想在 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

关于axes - Healpy 绘图 : How do i make a figure with subplots using the healpy. mollview 投影?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37844221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com