Почему функции на проектируемом субплоте 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).

Другие вопросы по тегам