Data
. Cada tabla contiene
las informaciones sobre un tipo de estrellas según indican los nombres de
archivo. La información viene en 3 columnas: luminosidad en luminosidades
solares, Temperatura en Kelvin y Radio de la estrella en unidades arbitrariasFue realizado por primera vez en 1905 por el astrónomo Ejnar Hertzprung, luego de manera independiente en 1913 por Henry Norris Russell. El diagrama de Hertzsprung mostraba la luminosidad de las estrellas en función de su color, mientras que el realizado por Russell mostraba la luminosidad en función del tipo espectral. Con el tiempo se mostro que ambos diagramas son equivalentes. [2]
De manera usual, el eje horizontal muestra como a medida que aumenta la temperatura de una estrella, su color también cambia, yendo desde el rojo a un tono azulado, pasando antes por tonos naranjas y blancos. El eje vertical muestra la luminosidad tomando como referencia al Sol, facilitando así una identificación intuitiva de la luminosidad del resto de estrellas. [1]
El diagrama muestra que las estrellas tienden a encontrarse agrupadas en algunas zonas específicas del mismo. La zona predominante es la diagonal que va de la región superior izquierda (caliente y brillante) a la región inferior derecha (fría y menos brillante), esta región se denomina secuencia principal. El factor común de las estrellas que forman parte de esta secuencia es que todas producen energía mediante la fusión de hidrógeno para producir helio en su interior. En relación con la masa, las estrellas de mayor masa, las gigantes azules, se sitúan en la zona superior izquierda (zona caliente y brillante), mientras que las estrellas de menor masa, las enanas rojas, se encuentran a la derecha y abajo (zona fría y menos brillante). En la esquina inferior izquierda se encuentran las enanas blancas, y en la esquina superior derecha de la secuencia principal se encuentran las gigantes rojas y las supergigantes. [2]
import pandas as pd #importando librería pandas para leer los datos
dwarfs = pd.read_csv('data/dwarfs.csv')
giants = pd.read_csv('data/giants.txt', sep=' ') # sep=' ' para leer correctamente las filas y columnas
ms = pd.read_csv('data/ms.csv')
supergiants = pd.read_csv('data/supergiants.txt', sep=' ')
dataframes = pd.concat([dwarfs,giants,ms,supergiants]) # para concatenar en un solo dataframe
#dataframes.to_csv(r'export_dataframe.csv')
import matplotlib.pyplot as plt #importando librería matplotlib.pyplot para graficar y editar grafico
#separando los datos de cada columna sin el encabezado e indexado
temperatura = dataframes.temp
luminosidad = dataframes.lum
Restrellas = dataframes.radius
#iniciando las configuraciones de la figura:
#tamaño, titulo, labels, limimtes de ejes y escala logarítmica en el eje vertical
plt.figure(figsize = (15,10))
plt.title('Diagrama Hertzsprung - Russell\n', fontsize = 20, fontweight = 'bold')
plt.xlabel('Temperatura (K)', fontsize=12, fontweight = 'bold')
plt.ylabel('Luminosidad ($L_{Sol}$)', fontsize = 12, fontweight = 'bold')
plt.xlim(14000, 2500)
plt.ylim(0.00001,100000000)
plt.yscale('log')
#insertando textos en sus respectivas regiones con su edición.
plt.text(12000, 9000000, 'Gigantes\n azules', fontsize = 14, fontweight = 'bold')
plt.text(5200, 9000000, 'Supergigantes\n rojas', fontsize = 14, fontweight = 'bold')
plt.text(5200, 500, 'Gigantes\n rojas', fontsize = 14, fontweight = 'bold')
plt.text(12000, 8, 'Secuencia\n principal', fontsize = 14, fontweight = 'bold')
plt.text(5200, 0.005, 'Secuencia\n principal', fontsize = 14, fontweight = 'bold')
plt.text(9500, 0.005, 'Enanas\nblancas', fontsize = 14, fontweight = 'bold')
#insertando puntos con su determinada edicion de tamaño, color y contorno.
plt.scatter(temperatura, luminosidad, Restrellas*25, temperatura, edgecolors = 'k', cmap = 'RdYlBu')
#plt.colorbar() # para ver barra de colores de convensión en función de la temperatura
plt.show()
from matplotlib.animation import FuncAnimation #importando FuncAnimation para animación
#iniciando las configuraciones de la figura:
#tamaño, titulo, labels, limimtes de ejes y escala logarítmica en el eje vertical
graf = plt.figure(figsize=(15,10))
plt.title('Diagrama Hertzsprung - Russell\n', fontsize = 20, fontweight = 'bold')
plt.xlabel('Temperatura (K)', fontsize=12, fontweight = 'bold')
plt.ylabel('Luminosidad ($L_{Sol}$)', fontsize = 12, fontweight = 'bold')
plt.xlim(14000, 2500)
plt.ylim(0.00001,100000000)
plt.yscale('log')
#definiendo la función gif para la animación con entrada t el cual será el iterador del gif
def gif(t):
if any: # condicional para insertar los puntos iteradamente,
#retorna true si alguno de los elementos en t es true
x=[]
y=[]
R=[]
x.append(dataframes.temp.iloc[:t]) #añadiendo a listas los datos de cada columna,
# usando iloc para tomar los datos en base a la posición segun fila y columna
y.append(dataframes.lum.iloc[:t])
R.append(dataframes.radius.iloc[:t]*25) #*25 para aumentar visibilidad de estrellas
z = dataframes.temp.iloc[:t]
s = plt.scatter(x, y , R, z, cmap='RdYlBu', edgecolors='k')
if t > len(dataframes): #condicional para insertar los textos a cada zona correspondiente al final de
#aparecer todas las estrellas
plt.text(12000, 9000000, 'Gigantes\n azules', fontsize = 14, fontweight = 'bold')
plt.text(5200, 9000000, 'Supergigantes\n rojas', fontsize = 14, fontweight = 'bold')
plt.text(5200, 500, 'Gigantes\n rojas', fontsize = 14, fontweight = 'bold')
plt.text(12000, 8, 'Secuencia\n principal', fontsize = 14, fontweight = 'bold')
plt.text(5200, 0.005, 'Secuencia\n principal', fontsize = 14, fontweight = 'bold')
plt.text(9500, 0.005, 'Enanas\nblancas', fontsize = 14, fontweight = 'bold')
return s
anim= FuncAnimation(graf,gif,frames=len(dataframes)+25, interval=200) #aplicación de la función de animación
#+25 para ver figura finalizada
anim.save('DiagramaH-R.gif') #Animación guardada
plt.close(graf)
MovieWriter ffmpeg unavailable; using Pillow instead.