Астрозадача №5: 

Решение

from astropy import units as u
from astropy.coordinates import SkyCoord
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors 

# Пустые списки для данных
RA = []
Dec = []
Fluence = []

i=0

with open("Gamma-ray burst. Swift data.txt", "r") as f:
    for line in f:
        if i!=0:
            data = line.split()
            RA.append(float(data[1]))
            Dec.append(float(data[2]))
            try:
                Fluence.append(float(data[3]))
            except ValueError:
                RA.pop()
                Dec.pop()

        i=i+1

# Запись данных в класс SkyCoord
w = SkyCoord(RA*u.degree,Dec*u.degree)

# Перевод в галактические координаты 
w_gal = w.galactic

def plot_mwd(RA,Dec,col=0, org=0,projection='aitoff'):
    
    x = np.remainder(RA+360-org,360) # сдвиг значений
    ind = x>180
    x[ind] -= 360    # преобразование шкалы в [-180, 180]
    
    # Создание изображения
    fig = plt.figure(figsize=(15, 10))
    tick_labels = np.array([-150, -120, -90, -60, -30, 0, 30, 60, 90, 120, 150])
    ax = fig.add_subplot(111, projection=projection, facecolor ='black')
    ax.set_xticklabels(tick_labels, color = 'w')
    
    cm = plt.cm.get_cmap('jet')
    
    SC = ax.scatter(np.radians(x),np.radians(Dec), s = 30, c = col, marker = '.', cmap = cm)

    ax.grid(color='white', linestyle='-', linewidth=0.2)
    ax.set_title('Gamma-ray burst. Swift data',pad = 40)
    ax.title.set_fontsize(30)
    
    # Настройка colorbar
    cbar = plt.colorbar(SC, shrink=0.8, pad=0.10, orientation='horizontal')
    cbar.ax.tick_params(labelsize=10)
    cbar.set_label('Fluence (15-150 keV) [$10^{-7}$ erg/cm$^2$]', fontsize=15)
    # plt.savefig('Gamma-ray burst. Swift data.jpg')

coord = np.array([(w_gal.l.degree,w_gal.b.degree)])

# цикл для нормального отображения цветов (т.к. в основном все всплески со значениями 1-20)
for i in range(0,len(Fluence),1) :
    if Fluence[i] > 100:
        Fluence[i] = 100
        
Fluence = np.array([Fluence])

plot_mwd(coord[:,0],coord[:,1],Fluence[:])   
plt.show()
Made with Slides.com