Решение
import numpy as np
import matplotlib.pyplot as plt
# Импортируем данные из файлов
M=np.loadtxt("data_M.txt",delimiter='\t', dtype=np.float)
B_V=np.loadtxt("data_B_V.txt",delimiter='\t', dtype=np.float)
M_1=np.loadtxt("data_M_1.txt",delimiter='\t', dtype=np.float)
B_V_1=np.loadtxt("data_B_V_1.txt",delimiter='\t', dtype=np.float)
# Создаём списки данных
B_V = list(B_V) + list(B_V_1)
M = list(M) + list(M_1)
# Рассчитываем температуру согласно формуле
Kel = []
for i in B_V:
Kel.append(float(4600*(1/(0.92*i+1.7)+1/(0.92*i+0.62))))
# Создаём массив цветов rgb
RGB = np.zeros((len(B_V),3))
for i in range(0,len(Kel),1):
Kel[i] = Kel[i] / 100
# Вычисление красного
if Kel[i] <= 66:
Red = 255
else:
Red = Kel[i] - 60
Red = 329.698727446*Red**(-0.1332047592)
if Red < 0:
Red = 0
if Red > 255 :
Red = 255
r = Red / 255
# Вычисление зелёного
if Kel[i] <= 66:
Green = Kel[i]
Green = 99.4708025861 * np.log(Green) - 161.1195681661
if Green < 0:
Green = 0
if Green > 255:
Green = 255
else:
Green = Kel[i] - 60
Green = 288.1221695283 * Green**(-0.0755148492)
if Green < 0:
Green = 0
if Green > 255:
Green = 255
g = Green / 255
# Вычисление синего
if Kel[i] >= 66:
Blue = 255
else:
if Kel[i] <= 19:
Blue = 0
else:
Blue = Kel[i] - 10
Blue = 138.5177312231 * np.log(Blue) - 305.0447927307
if Blue < 0:
Blue = 0
if Blue > 255:
Blue = 255
b = Blue / 255
# Заполняем массив цветов rgb
RGB[i]=[r,g,b]
# Возвращаем значения температуры к первоначальным
Kel[i] = Kel[i] * 100
# Построение диаграммы
plt.style.use(['dark_background'])
fig = plt.figure(figsize=(12,12), frameon=True)
plt.title('Диаграмма Герцшпрунга-Рассела', fontsize=25)
plt.ylim(20,-20)
plt.xlim(20000,1000)
plt.scatter(Kel,M,s=0.02, c = RGB)
plt.xlabel("Температура, K", fontsize=15)
plt.ylabel("Абсолютная звёздная величина", fontsize=15)
plt.show()