EDIT:
好吧,我想出了一个糟糕的方法来做到这一点,涉及scipy.interpolate.griddata
我有一些二维数组 130x360 形式的地图,数组中的每个值对应于该点的测量值。
这些地图以赤经 (ra) 和赤纬 (dec) 形式提供,范围来自
相对角:0 至 360 度
十二月:-40 至 90 度
我已设法通过以下方式在赤道坐标中绘制地图:
import matplotlib.pyplot as plt
import numpy as np
z = np.load('map.npy')
fig = plt.figure()
ax = fig.add_subplot(111, projection='aitoff')
ra = np.linspace(-np.pi, np.pi, 360)
dec = np.linspace(-40 * np.pi/180, np.pi/2, 130)
Ra, Dec = np.meshgrid(ra, dec)
im = ax.pcolormesh(Ra, Dec, z, cmap=plt.cm.jet, norm=colors.LogNorm(vmax=z.max()))
plt.grid()
plt.show()
这给我带来了以下情节:
我现在希望将此图转换为银河系坐标,以便银河系带穿过图像。
我尝试使用 astropy 的 SkyCoord 模块来转换Ra
and Dec
阵列到银河系
from astropy.coordinates import SkyCoord
coords = SkyCoord(ra=Ra, dec=Dec, unit='rad').galactic
B = coords.galactic.b.rad
L = coords.galactic.l.rad
im = ax.pcolormesh(L, B, z, cmap=plt.cm.jet, norm=colors.LogNorm(vmax=np.nanmax(z)))
我得到的东西看起来像这样
不太对劲...
我还创建了一个列表
ra
, dec
and z
对于我的图像中的每个点,并将每个点转换为银河坐标,
也许我可以将其转换回我需要的正确形状,以便我可以使用 pcolormesh 绘制它?
使用以下代码的效果如下
x_list = np.array(df['GLON_rad'])
y_list = np.array(df['GLAT_rad'])
z_list = np.array(df['z'])
coords = SkyCoord(l=x_list, b=y_list, unit='rad', frame="galactic")
plt.figure()
plt.subplot(111, projection='aitoff')
plt.scatter(-coords.l.wrap_at('180d').radian, coords.b.radian, c=z_list, cmap='plasma', norm=colors.LogNorm(vmax=np.nanmax(z)))
绝对是在正确的轨道上,但还没有完全实现,因为我觉得使用带有颜色参数的 plt.scatter 有点糟糕。