我有一张64x64像素的TESS星图,上面有一颗带有Gaia ID 4687500098271761792的星。根据TESS天文台指南第8页,1个像素约为21角秒。使用Gaia Archive,在“顶部特征”下方点击“搜索”,并提交一个查询以查看1000角秒内的恒星,这大致是我们需要的半径。我用
Gaia DR2 4687500098271761792
作为搜索名称,如下所示:
提交查询后,我会得到一个包含500颗恒星的列表,其中包括RA
和DEC
坐标。选择CSV
并点击下载结果
,我将获得围绕着4687500098271761792的恒星列表。这个结果文件也可以在这里找到。这是我们想要使用的Gaia输入。
从TESS中,我们有4687500098271761792_med.fits,一张图像文件。我们使用以下命令进行绘制:
from astropy.io import fits
from astropy.wcs import WCS
import matplotlib.pyplot as plt
hdul = fits.open("4687500098271761792_med.fits")[0]
wcs = WCS(hdul.header)
fig = plt.figure(figsize=(12,12))
fig.add_subplot(111, projection=wcs)
plt.imshow(hdul.data)
并获得一张漂亮的图片:
而且有很多警告,其中大部分在这里得到了友好的解释在问题中的警告,在评论中的解释。请注意,确实很好我们使用了WCS投影。为了检查,让我们只是绘制
hdul.data
中的数据,而不关心投影:plt.imshow(hdul.data)
结果:
几乎与之前相同,但现在轴的标签只是像素编号,而不是RA和DEC,这是最好的选择。第一个图中的DEC
和RA
值分别约为-72°和16°,这很好,因为Gaia目录给出了大约具有这些坐标的4687500098271761792附近的星星。因此,投影似乎还可以。现在让我们尝试在imshow()
图上绘制Gaia星星。我们从先前下载的CSV
文件中读取并提取对象的RA
和DEC
值:import pandas as pd
df=pd.read_csv("4687500098271761792_within_1000arcsec.csv")
ralist=df['ra'].tolist()
declist=df['dec'].tolist()
需要检查的图表:
plt.scatter(ralist,declist,marker='+')
形状不是预期的圆形,这可能是未来麻烦的指标。
让我们尝试将这些RA
和DEC
值转换为WCS
,并以此方式绘制它们:
for index, each in enumerate(ralist):
ra, dec = wcs.all_world2pix([each], [declist[index]], 1)
plt.scatter(ra, dec, marker='+', c='k')
结果是:{{result}}。 函数
all_world2pix
来自这里。参数1
仅设置原点位置。对all_world2pix
的描述如下:
然而,我们得到的点分布形状并不理想。让我们将TESS和Gaia数据组合起来:在此处,原点是图像左上角的坐标。 在FITS和Fortran标准中,这是1。在Numpy和C标准中,这是0。
hdul = fits.open("4687500098271761792_med.fits")[0]
wcs = WCS(hdul.header)
fig = plt.figure(figsize=(12,12))
fig.add_subplot(111, projection=wcs)
plt.imshow(hdul.data)
for index, each in enumerate(ralist):
ra, dec = wcs.all_world2pix([each], [declist[index]], 1)
plt.scatter(ra, dec, marker='+', c='k')
我们得到:
这远远不是理想状态。我希望在一个有许多标记的imshow()
图片上有一个基础图像,并且标记应该在TESS图像上的星星位置。我使用的Jupyter笔记本可以在这里找到。我错过了哪些步骤,或者我做错了什么?
进一步发展 在回应另一个问题时,keflavich友好地建议使用
transform
参数进行世界坐标绘图。尝试了一些示例点(下图中弯曲的十字形)。还在不处理数据的情况下将Gaia数据绘制在图上,它们最终集中在一个非常狭窄的空间。对它们应用了transform
方法,获得了一个看似非常相似的结果。代码(也可在这里找到):import pandas as pd
df=pd.read_csv("4687500098271761792_within_1000arcsec.csv")
ralist=df['ra'].tolist()
declist=df['dec'].tolist()
from astropy.io import fits
from astropy.wcs import WCS
import matplotlib.pyplot as plt
hdul = fits.open("4687500098271761792_med.fits")[0]
wcs = WCS(hdul.header)
fig = plt.figure(figsize=(12,12))
fig.add_subplot(111, projection=wcs)
plt.imshow(hdul.data)
ax = fig.gca()
ax.scatter([16], [-72], transform=ax.get_transform('world'))
ax.scatter([16], [-72.2], transform=ax.get_transform('world'))
ax.scatter([16], [-72.4], transform=ax.get_transform('world'))
ax.scatter([16], [-72.6], transform=ax.get_transform('world'))
ax.scatter([16], [-72.8], transform=ax.get_transform('world'))
ax.scatter([16], [-73], transform=ax.get_transform('world'))
ax.scatter([15], [-72.5], transform=ax.get_transform('world'))
ax.scatter([15.4], [-72.5], transform=ax.get_transform('world'))
ax.scatter([15.8], [-72.5], transform=ax.get_transform('world'))
ax.scatter([16.2], [-72.5], transform=ax.get_transform('world'))
ax.scatter([16.6], [-72.5], transform=ax.get_transform('world'))
ax.scatter([17], [-72.5], transform=ax.get_transform('world'))
for index, each in enumerate(ralist):
ax.scatter([each], [declist[index]], transform=ax.get_transform('world'),c='k',marker='+')
for index, each in enumerate(ralist):
ax.scatter([each], [declist[index]],c='b',marker='+')
并生成相应的图表:
这种弯曲的十字形是预料之中的,因为TESS与恒定的纬度和经度线不对齐(即十字架的臂不必与TESS图像的边平行,用imshow()
绘制)。现在让我们尝试绘制恒定的RA和DEC线(或者说,恒定的纬度和经度线),以更好地理解为什么来自Gaia的数据点错位。通过添加几行代码扩展上面的代码:
ax.coords.grid(True, color='green', ls='solid')
overlay = ax.get_coords_overlay('icrs')
overlay.grid(color='red', ls='dotted')
结果令人鼓舞:
(请在此处查看笔记本here。)