Я пытаюсь построить диаграмму разреженных точек на определенном участке неба и затем добавить к графику круг. Обратите внимание, что я не хочу изображать полное небо, только область вокруг точек данных. Координаты точек данных в градусах следующие:
ra = np.array([248.3, 249.8, 250.2, 250.5, 250.5])
dec = np.array([68.8, 67.7, 65.7, 72.2, 63.3])
Центр круга должен находиться в
ra1 = 270
dec1= 66
Похоже, что пакеты для этого (поскольку нам нужно учитывать кривизну неба!) будут astropy
и regions
. Но я просто не могу сделать это работающим. Этот пост здесь почти отвечает на то, что я хочу достичь, но он работает только с одной точкой, и я не вижу, как добавить больше точек. Спасибо за совет!
Ответ
Для создания диаграммы рассеяния с кругом на регионе неба, используя библиотеки astropy
и regions
, можно выполнить следующие шаги. Этот код сначала создаст диаграмму рассеяния для ваших данных, а затем добавит круг, центрированный на заданных координатах.
Вот полный код для выполнения этой задачи:
import numpy as np
import matplotlib.pyplot as plt
from astropy.coordinates import SkyCoord
import regions
# Данные для диаграммы рассеяния
ra = np.array([248.3, 249.8, 250.2, 250.5, 250.5]) # Прямое восхождение
dec = np.array([68.8, 67.7, 65.7, 72.2, 63.3]) # Склонение
# Координаты центра круга
ra_center = 270
dec_center = 66
# Создание диаграммы рассеяния
plt.figure(figsize=(8, 6))
plt.scatter(ra, dec, color='blue', label='Данные', s=100)
# Создание круга с использованием astropy и regions
circle_radius = 5 # Радиус круга в градусах
circle = regions.CircleSkyRegion(center=SkyCoord(ra_center, dec_center, unit='deg'), radius=circle_radius * u.deg)
# Отображение круга на диаграмме
circle_patch = circle.as_artist()
plt.gca().add_artist(circle_patch)
plt.gca().set_aspect('equal', adjustable='datalim') # Автоматическая настройка пропорций
plt.xlim(ra.min() - 1, ra.max() + 1) # Ограничение по оси X
plt.ylim(dec.min() - 1, dec.max() + 1) # Ограничение по оси Y
# Настройка меток и заголовка
plt.xlabel('Прямое восхождение (градусы)')
plt.ylabel('Склонение (градусы)')
plt.title('Диаграмма рассеяния с кругом')
plt.grid()
plt.legend()
plt.show()
Пояснение:
-
Импорт библиотек: Мы импортируем необходимые библиотеки, включая NumPy для работы с массивами, Matplotlib для построения графиков, а также
SkyCoord
изastropy.coordinates
для работы с астрономическими координатами иregions
для работы с областью на небе. -
Определение координат: Задаются данные для прямого восхождения (RA) и склонения (Dec), а также координаты центра круга.
-
Создание диаграммы рассеяния: Используется функция
plt.scatter()
для создания диаграммы рассеяния. -
Создание и отображение круга: Создается объект
CircleSkyRegion
с заданным центром и радиусом. Далее круг добавляется на график. - Настройка графика: Устанавливаются метки осей, заголовок графика и легенда. График отображается с использованием
plt.show()
.
Этот код создаст красивую диаграмму рассеяния с вашими данными и окружит заданную область кругом, который центрирован на указанных координатах.