Las estrellas como todo obejeto del universo sigue un ciclo(tanto las que están y no en la
Secuencia Principal) desde el momento de su formación hasta que, según la masa que
tengan, termimen en diferentes formas como supernovas o agujeros negros. El ciclo puede
ser caracterizado por el diagrama de Hertzsprung-Russel, la cual relaciona las magnitudes
absolutas o luminosas en comparación con sus clasificaciones espectrales o las temperaturas
efectivas.
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
from math import log
import matplotlib.animation as animation
from matplotlib.animation import FuncAnimation
plt.style.use('dark_background')
En la siguiente línea se importa los archivos:
dwarfs = pd.read_csv("./data/dwarfs.csv")
ms = pd.read_csv("./data/ms.csv")
c = pd.read_csv('./data/giants.txt', sep=" ", header=None) ##Había problemas con los archivos txt, se tuvo que convertir a csv.
c.columns = c.loc[0]
giants = c.drop([0]) ## se asigno la primera fila como los nombres de las columnas y se procedió a eliminar dicha fila
e = pd.read_csv('./data/giants.txt', sep=" ", header=None)
e.columns = e.loc[0]
supergiants = e.drop([0])
Se unieron los archivos cargados, el archivo de las enanas blancas se trabajó por separado:
final = pd.concat([supergiants, giants, ms], axis=0, ignore_index=True)
Se creo listas con las columnas de los archivos, cada punto se cambió a float para que no haya problema:
Temp = final['temp'].tolist()
Tempe = [float(i) for i in Temp]
llum = final["lum"].tolist()
Lumi = [float(i) for i in llum]
Rad = final['radius'].tolist()
Radio = [float(i) for i in Rad]
Radio = [15*i for i in Radio]
"""-------------------------"""
## se hizo lo mismo para las enanas blancas
t = dwarfs["temp"].tolist()
t = [float(i) for i in t]
l = dwarfs["lum"].tolist()
l = [float(i) for i in l]
r = dwarfs['radius'].tolist()
r = [float(i) for i in r]
r = [15*i for i in r]
Se procedió a dibujar, se usó la función "scatter":
x = Tempe ##nombres de variable a las listas
y = Lumi
fig, ax = plt.subplots(sharey=True, figsize=(10,10))
ax.scatter(x, y, s = Radio, c = x, cmap = "RdYlBu", alpha = 5, linewidth = 1)
ax.scatter(t, l, s = r, c = t, cmap = "pink", alpha = 5, linewidth = 1)
# Add titles (main and on axis)
ax.set_xlabel("Temperature (K)")
ax.set_ylabel("Luminosity $(L_{sum})$")
ax.set_title("H-R Diagram")
ax.set_yticks([10e-4, 10e-2, 1, 10e2, 10e4])
ax.set_xticks([ 10000, 5000, 2500])
ax.invert_xaxis()
ax.semilogy()
ax.text(1.2*10e3, 0.2*10e2, "Blue Giants", fontsize = 20)
ax.text(1.2*10e3, 0.02*10e2, "Main Sequence", fontsize = 10)
ax.text(5000, 0.002, "Main Sequence", fontsize = 10)
ax.text(5000, 0.02*10e2, "Red Giants", fontsize = 10)
ax.text(5000, 0.2*10e2, "Red Supergiants", fontsize = 15)
ax.text(8000, 0.002, "White Dwarfs", fontsize = 10)
plt.show()
Animación del diagrama H-R:
Función para ordenar los valores en función a la temperatura:
def Convert(lst, lst2, lst3):
Real = {lst[i]: {lst2[i], lst3[i]} for i in range(len(lst))}
Real1 = dict(sorted(Real.items(), key=lambda item: item[0]))
return Real1
Real = Convert(Tempe, Lumi, Radio)
HR = pd.DataFrame(Real.items(), columns=['Temperature', "Luminosity"])
HR
Temperature | Luminosity | |
---|---|---|
0 | 3577.003926 | {0.0007755324957585, 12.220538100916439} |
1 | 3654.601099 | {304.2285727480961, 2182.2521117415827} |
2 | 3691.168543 | {0.0026375457408893, 18.14667042090158} |
3 | 3793.506494 | {24.4504065244656, 0.0068233869414166} |
4 | 3808.609875 | {58.8843655355589, 999.6440760272764} |
... | ... | ... |
90 | 10625.406634 | {37.93253797879837, 46.30202658603084} |
91 | 10896.877545 | {177.82794100389228, 60.24241427280589} |
92 | 11231.323162 | {45.64527303529655, 111.48078033638414} |
93 | 11709.130116 | {140.34598729211754, 44.16870676777785} |
94 | 13010.740359 | {43.82304483062301, 303.3891184194272} |
95 rows × 2 columns
fig, ax = plt.subplots(sharey=True, figsize=(10,10))
x = data['temp'].iloc[:i]
y = data['lum'].iloc[:i]
color = data['temp'].iloc[:i]
radio = 9.5*data['radius'].iloc[:i]
ax.set_xlabel("Temperature (K)")
ax.set_ylabel("Luminosity $(L_{sum})$")
ax.set_title("H-R Diagram")
ax.set_yticks([10e-4, 10e-2, 1, 10e2, 10e4])
ax.set_xticks([ 10000, 5000, 2500])
ax.invert_xaxis()
ax.semilogy()
plot = ax.scatter(x = HR["Temperature"].iloc[0],
y = HR["Luminosity"].iloc[0],
s=Radio[0], c=x[0], cmap="RdYlBu", alpha=5, linewidth=1)
def animate(i):
xi = x[:i]
yi= y[:i]
ri = 15*Radio[:i]
ci = x[:i]
plot = ax.scatter(xi, yi, s = ri, c = ci, cmap = "RdYlBu", alpha = 5, linewidth = 1)
return plot
anim = FuncAnimation(fig, animate, frames=100, interval=1, blit=True)
plt.show
File "<ipython-input-434-25cbb2e85ebe>", line 2 x = data['temp'].iloc[:i] ^ IndentationError: unexpected indent