gpt4 book ai didi

python - 使用healpy使用HEALPix像素化制作2D直方图

转载 作者:行者123 更新时间:2023-12-04 11:58:47 26 4
gpt4 key购买 nike

数据是天空中对象的坐标,例如,如下所示:

import pylab as plt
import numpy as np
l = np.random.uniform(-180, 180, 2000)
b = np.random.uniform(-90, 90, 2000)

我想做一个2D直方图,以便在Mollweide投影上使用HEALPix像素化在天空中用 (l, b)坐标绘制某个点的密度图。如何使用healpy做到这一点?

本教程:

http://healpy.readthedocs.io/en/v1.9.0/tutorial.html



说了如何绘制一维数组或拟合文件,但我没有找到如何使用这种像素化方法来绘制二维直方图。

我也找到了此功能,但无法正常工作,所以我被卡住了。
hp.projaxes.MollweideAxes.hist2d(l, b, bins=10)

我可以通过以下方式在Mollweide投影中绘制这些点的图:
l_axis_name ='Latitude l (deg)'
b_axis_name = 'Longitude b (deg)'

fig = plt.figure(figsize=(12,9))
ax = fig.add_subplot(111, projection="mollweide")
ax.grid(True)

ax.scatter(np.array(l)*np.pi/180., np.array(b)*np.pi/180.)

plt.show()

预先非常感谢您的帮助。

最佳答案

好问题!我编写了一个简短的函数,将目录转换为数字的HEALPix映射:

from astropy.coordinates import SkyCoord
import healpy as hp
import numpy as np

def cat2hpx(lon, lat, nside, radec=True):
"""
Convert a catalogue to a HEALPix map of number counts per resolution
element.

Parameters
----------
lon, lat : (ndarray, ndarray)
Coordinates of the sources in degree. If radec=True, assume input is in the icrs
coordinate system. Otherwise assume input is glon, glat

nside : int
HEALPix nside of the target map

radec : bool
Switch between R.A./Dec and glon/glat as input coordinate system.

Return
------
hpx_map : ndarray
HEALPix map of the catalogue number counts in Galactic coordinates

"""

npix = hp.nside2npix(nside)

if radec:
eq = SkyCoord(lon, lat, 'icrs', unit='deg')
l, b = eq.galactic.l.value, eq.galactic.b.value
else:
l, b = lon, lat

# conver to theta, phi
theta = np.radians(90. - b)
phi = np.radians(l)

# convert to HEALPix indices
indices = hp.ang2pix(nside, theta, phi)

idx, counts = np.unique(indices, return_counts=True)

# fill the fullsky map
hpx_map = np.zeros(npix, dtype=int)
hpx_map[idx] = counts

return hpx_map

然后,您可以使用它来填充HEALPix映射:
l = np.random.uniform(-180, 180, 20000)
b = np.random.uniform(-90, 90, 20000)

hpx_map = hpx.cat2hpx(l, b, nside=32, radec=False)

在这里, nside确定像素网格的精细程度。
hp.mollview(np.log10(hpx_map+1))

enter image description here

还要注意,通过在银河纬度上均匀采样,您将更喜欢在银河极点的数据点。如果要避免这种情况,可以使用余弦将其缩小。
hp.orthview(np.log10(hpx_map+1), rot=[0, 90])
hp.graticule(color='white')

enter image description here

关于python - 使用healpy使用HEALPix像素化制作2D直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50483279/

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