为什么WCS投影子图上的功能在matplotlib中放在错误的位置?
问题内容:
我有一个关于天文物体的拟合文件。我可以这样绘制:
from astropy.io import fits
from astropy.wcs import WCS
hdul = fits.open(fitsfilename)[0]
wcs = WCS(hdul.header)
fig = plt.figure(figsize=(12,12))
fig.add_subplot(111, projection=wcs)
plt.imshow(hdul.data)
这可行,并产生一个漂亮的图片:
我想在此图中添加一些其他功能,但无法正常工作。例如,让我们尝试将圆添加到119°,-67°30’。我通过以下方式扩展代码:
plt.scatter([119],[-67.5],c='r',s=500)
我得到的是:
确实不是我们想要的,圆在118°5’,-67°5’左右,而不是应该在的位置(119°,-67°30’)。
我出了什么问题,或者什么是解决此问题的好方法?
注意:跑步时wcs = WCS(hdul.header)
,我会收到警告:
警告:VerifyWarning:验证报告错误:[astropy.io.fits.verify]警告:VerifyWarning:卡“
A_2_0”不是FITS标准(无效值字符串:“ 3.29341755408e-05”)。修复了“
A_2_0”卡符合FITS标准的问题。[astropy.io.fits.verify]警告:VerifyWarning:注意:astropy.io.fits使用基于零的索引。[astropy.io.fits.verify]警告:VerifyWarning:卡“
A_1_1”不是FITS标准(无效值字符串:“ 1.51709339878e-05”)。修复了“
A_1_1”卡符合FITS标准的问题。[astropy.io.fits.verify]警告:VerifyWarning:卡“
A_0_2”不是FITS标准(无效值字符串:“ 5.17973753556e-06”)。修复了“
A_0_2”卡符合FITS标准的问题。[astropy.io.fits.verify]警告:Verify警告:卡“ B_2_0”
不是FITS标准(无效值字符串:‘2.97627426087e-06’)。修复了“
B_2_0”卡符合FITS标准的问题。[astropy.io.fits.verify]警告:VerifyWarning:卡“
B_1_1”不是FITS标准(无效值字符串:“ 2.71948126373e-05”)。修复了“
B_1_1”卡符合FITS标准的问题。[astropy.io.fits.verify]警告:VerifyWarning:卡“
B_0_2”不是FITS标准(无效值字符串:“ 1.66848449653e-05”)。修复了“
B_0_2”卡符合FITS标准的问题。[astropy.io.fits.verify]警告:VerifyWarning:卡“
AP_1_0”不是FITS标准(无效值字符串:“ 1.79541533196e-06”)。修复了“
AP_1_0”卡符合FITS标准的问题。[astropy.io.fits.verify]警告:Verify警告:卡“ AP_0_1”
不是FITS标准(无效值字符串:‘9.20624843151e-07’)。修复了“
AP_0_1”卡符合FITS标准的问题。[astropy.io.fits.verify]警告:VerifyWarning:卡“
AP_2_0”不是FITS标准(无效值字符串:“-3.29292923201e-05”)。修复了“
AP_2_0”卡符合FITS标准的问题。[astropy.io.fits.verify]警告:VerifyWarning:卡“
AP_1_1”不是FITS标准(无效值字符串:“-1.51738446887e-05”)。修复了“
AP_1_1”卡符合FITS标准的问题。[astropy.io.fits.verify]警告:VerifyWarning:卡“
AP_0_2”不是FITS标准(无效值字符串:“-5.18321445978e-06”)。修复了“
AP_0_2”卡符合FITS标准的问题。[astropy.io.fits.verify]警告:验证警告:卡“ BP_1_0”
不是FITS标准(无效值字符串:‘8.99029048217e-07’)。修复了“
BP_1_0”卡符合FITS标准的问题。[astropy.io.fits.verify]警告:VerifyWarning:卡“
BP_0_1”不是FITS标准(无效值字符串:“ 1.15967736014e-06”)。修复了“
BP_0_1”卡符合FITS标准的问题。[astropy.io.fits.verify]警告:VerifyWarning:卡“
BP_2_0”不是FITS标准(无效值字符串:“-2.97837492348e-06”)。修复了“
BP_2_0”卡符合FITS标准的问题。[astropy.io.fits.verify]警告:VerifyWarning:卡“
BP_1_1”不是FITS标准(无效值字符串:“-2.71998518336e-05”)。修复了“
BP_1_1”卡符合FITS标准的问题。[astropy.io.fits.verify]警告:Verify警告:卡“ BP_0_2”
不是FITS标准(无效值字符串:’-1.66872388359e-05’)。修复了“
BP_0_2”卡符合FITS标准的问题。[astropy.io.fits.verify]警告:VerifyWarning:卡’WCSR_PRJ’不是FITS标准(无效值字符串:‘3.6679e-07’)。修复了“
WCSR_PRJ”卡符合FITS标准的问题。[astropy.io.fits.verify]警告:VerifyWarning:卡’WCSR_PIX’不是FITS标准(无效值字符串:‘8.2565e-05’)。修复了“
WCSR_PIX”卡符合FITS标准的问题。[astropy.io.fits.verify]
卡符合FITS标准。[astropy.io.fits.verify]警告:VerifyWarning:卡’WCSR_PIX’不是FITS标准(无效值字符串:‘8.2565e-05’)。修复了“
WCSR_PIX”卡符合FITS标准的问题。[astropy.io.fits.verify]
卡符合FITS标准。[astropy.io.fits.verify]警告:VerifyWarning:卡’WCSR_PIX’不是FITS标准(无效值字符串:‘8.2565e-05’)。修复了“
WCSR_PIX”卡符合FITS标准的问题。[astropy.io.fits.verify]
因此,这可能是相关的;如何解决它的问题仍然存在。
问题答案:
要绘制世界坐标,您需要指定transform
,例如:
ax = fig.gca()
ax.scatter([34], [3.2], transform=ax.get_transform('world'))
通常,您可以忽略那些FITS标头警告,因为那里没有FITS标头卡与WCS(afaik)相关。