关于ggplot2:R:在银河系中以Mollweide投影绘制天空地图

R: plotting sky map in Mollweide projection in galactic coordinate system

我需要在Mollweide投影(椭圆投影提供360视角的椭圆投影,用于绘制夜空)中生成带有星座等特征的星图。我使用sf包在https://kimnewzealand.github.io/2019/02/21/celestial-maps/上找到了一个配方,并将天空对象的默认EPSG:4326数据转换为Mollweide投影。

在某个阶段,使用以下命令将数据转换为Mollweide投影:

1
constellation_lines_sf_trans<- st_transform(constellation_lines_sf_trans, crs ="+proj=moll")

按照链接中所述的线条复制的结果图像如下所示:

Mollweide projection of the sky with constellations: equatorial coordinates

很好,但是,坐标系是赤道的,基本上与地球上的所有坐标系都具有相同的旋转轴,例如WGS84(北极向上)。例如,在该图上显示了银河系,以60度角移动。我们需要所谓的银河系坐标:这是与银河系平面重合的坐标平面。因此,这里的银河系只是椭圆轴的一条水平线。例如,在其他地方找到的解决方案似乎使用了相同的技术,但是此处未提供代码:

Mollweide projection of the sky in galactic coordinates

这里的银河系是一条水平线,北极在左上角(用np表示;例如,在这里,您可以看到北极附近大熊/次要星座的可辨认星座)。我将拍摄此图像,但有一个盲点(显示天文台的盲区,该盲区无法到达天空中的该区域),因此我想重现此图像:星座+ Mollweide投影+星系的"银河"方向参考范围。

我们能够在R包中的各种坐标系之间进行转换。似乎大多数GIS工具都根据地球所需的旋转(北极向上)来使用各种与地球相关的坐标系和投影,这是GIS所需的大多数应用程序。问题是,是否有可能加载并转换为预定义的银河坐标系(或例如,转换为黄道系),或者是否可以在脚本中通过手动转换星形数据即时执行此转换。


编辑:实际上,经过进一步研究,看来这全都归结为您的投影进行旋转。我在下面进一步提到的交互式示例的代码中也会发生这种情况。要使其以银河系中心为中心,您需要旋转[93.5949, 28.9362, -58.5988],它指定围绕每个球面轴的[lambda,phi,γ]旋转角度(以度为单位)。 (旋转时,不再需要将radec坐标转换为银河坐标。)

我对R中的映射了解不多,无法说出是否可以在投影上指定旋转,但这是一个了不起的示例,使用d3.js展示了此过程(对于真正感兴趣的人,展示了角度在哪里来自)。如果不可能,下面的路线也许仍然可行。

我正在调查同一件事,可能发现了一些东西。我认为您首先需要将赤道ra(右升)和dec(赤纬)坐标转换为银河坐标。然后应用(Mollweide)投影。由于我的情况略有不同,因此我不确定这是否完全正确,但至少这对我有用:

  • 数据集在赤道坐标中有radec行(在我的情况下以度为单位)
  • 使用astrolibR软件包的euler函数,我计算了银河经度gl和纬度gb(ps:也可以使用glactc函数):
1
2
data$gl <- euler(data$ra, data$dec, select=1)$ao
data$gb <- euler(data$ra, data$dec, select=1)$bo
  • 接下来,使用这些新坐标,我将Aitoff投影也用作astrolibR软件包的一部分,以获取xy坐标:
1
2
data$x <- -aitoff(data$gl, data$gb)$x
data$y <- aitoff(data$gl, data$gb)$y

然后我可以画

1
ggplot(data, aes(x, y)) + geom_point(shape=16, size = 0.1, alpha = 0.2) + coord_fixed()

(下图基于我自己的观测数据集,"暗线"沿黄道线,右下角的两个斑点分别是大麦哲伦星云和小麦哲伦星云)
我发现比较此交互式地图并将坐标设置为"银河"(以0,0为中心),然后尝试各种投影很有用。
Plotting observations in galactic coordinates

也许您可以尝试使用glgb坐标应用Mollweide投影?