Почему функции на проектируемом субплоте 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] ПРЕДУПРЕЖДЕНИЕ: VerifyWarning: карта '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] ПРЕДУПРЕЖДЕНИЕ: VerifyWarning: Карта '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] ПРЕДУПРЕЖДЕНИЕ: VerifyWarning: Карта '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] ПРЕДУПРЕЖДЕНИЕ: VerifyWarning: карта '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]
Так что это может быть актуально; Вопрос о том, как это исправить, до сих пор не решен.
1 ответ
Чтобы построить в мировых координатах, вам нужно указать transform
Например:
ax = fig.gca()
ax.scatter([34], [3.2], transform=ax.get_transform('world'))
Как правило, вы можете игнорировать эти предупреждения заголовка FITS, поскольку ни одна из карт заголовка FITS там не связана с WCS (afaik).