Тиковые метки оси шкалы для координат

1

Я работаю с данными VLBI (очень длинная базовая интерферометрия, как та, которая использовалась для создания недавно теневого изображения черной дыры). Я строю изображение, которое взято из файла FITS. Посредством преобразования WCS оно преобразуется из пикселей в физические единицы, то есть в градусы. Кроме того, я поставил центральный пиксель в (0,0) в физических единицах.

Это выглядит хорошо, когда сюжет. Но я хочу обозначить оси в мас (миллиарсекунды), потому что область изображения на небе очень мала. Поэтому вместо 0deg0'0.001 "или 0.001" я хотел бы видеть 1 в качестве метки.

Изображение 174551 Изображение 174551

Вот базовый код для открытия фигуры: wcs = WCS(i[0].header).celestial # where я is a FITS object wcs.wcs.crval = [0,0] # to remove absolute coordinates of a source fig = plt.figure() ax = fig.add_subplot(111, projection = wcs) ra, dec = ax.coords[0], ax.coords[1]

  • Я пытался играть с
ax.xaxis.set_major_formatter(FuncFormatter(format_func))

но он, кажется, еще не реализован для оси, которая не является "скалярной". => поднять NotImplementedError() # выяснить, как поменять форматер

  • Изменение режима оси на "скалярный", т.е.
ra.set_coord_type('scalar') 

ломает локатор, я считаю. => все метки тиков перекрываются в 0 от оси x.

  • Addind scale не работал вообще (предположим, я все сделал правильно)
ax.ticklabel_format(useoffset = 1000, style = 'sci')

=> без изменений

Существуют ли другие способы преобразования меток оси для координатных данных в миллиарсекунды?

Теги:
matplotlib
fits

1 ответ

1

Я использовал не очень элегантный способ сделать это, может быть, это сработает в этом случае. Я использую метки для оси, которые являются строками вместо int.

x_values = [0.000, -0.003, -0.006]
labels = []
for value in x_values:
    labels.append(str(convert_to_mas(value)))

ax.set_xticks(x_values)
ax.set_xticklabels(labels) 

Это всего лишь общая идея, но вам придется адаптировать ее к своему коду. Я мог бы быть более конкретным, если бы вы добавили небольшой воспроизводимый пример. :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню