Код: Выделить всё
import numpy as np
import matplotlib.pyplot as plt
import astropy.wcs
ra = 151.416293
dec = 12.115556
points = np.random.normal(loc=((ra,), (dec,)), size=(2, 20))
wcs = astropy.wcs.WCS(
{
"ctype1": "RA---SIN",
"ctype2": "DEC--SIN",
"crval1": ra,
"crval2": dec,
"crpix1": 1248.0,
"crpix2": 267.0,
"naxis1": 132,
"naxis2": 132,
},
naxis=2,
)
fig = plt.figure()
ax = fig.add_subplot(projection=wcs)
transform = ax.get_transform('fk5')
ax.scatter(*points, transform=transform)
ax.set_xlim(1246, 1247)

Похоже, что это не относится к ax.annotate:
Код: Выделить всё
import numpy as np
import matplotlib.pyplot as plt
import astropy.wcs
wcs = astropy.wcs.WCS(
{
"ctype1": "RA---SIN",
"ctype2": "DEC--SIN",
"crval1": ra,
"crval2": dec,
"crpix1": 1248.0,
"crpix2": 267.0,
"naxis1": 132,
"naxis2": 132,
},
naxis=2,
)
fig = plt.figure()
ax = fig.add_subplot(projection=wcs)
transform = ax.get_transform('fk5')
ax.scatter(*points, transform=transform)
for i in range(points.shape[1]):
ax.annotate(f'point number {i}', points[:, i],
xycoords=transform)
ax.set_xlim(1246, 1247)

Без аргумента преобразования все ведет себя так, как я ожидаю, и переполнение отсекается:
Код: Выделить всё
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot()
ax.scatter(*points)
for i in range(points.shape[1]):
ax.annotate(f'point number {i}', points[:, i])
ax.set_xlim(150, 152)

Некоторые эксперименты показали, что эта проблема актуальна для любого преобразования, а не только для преобразований, связанных с wcs, но я недостаточно понимаю API преобразования, чтобы исследовать его дальше.
Как мне следует вырезать эти аннотации внеосевых осей? Я бы предпочел не выяснять пределы, сопоставлять их с системами координат и фильтровать вручную.
Подробнее здесь: https://stackoverflow.com/questions/798 ... projection
Мобильная версия