#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
@author: jennifer
Tarea clase 3
"""
'\n@author: jennifer\nTarea clase 3\n'
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 arbitrariasNOTA: Variantes a estas propuestas serán bien recibidas
Es un diagrama de la luminosidad de una estrella en función de la temperatura superficial. La luminosidad corresponde a la cantidad de energía por unidad de tiempo emitida en todas direcciones.
El químico Ejnar Hertzsprung estudió la luminosidad de las estrellas y con estos estudios, para 1909 comenzó con la clasificación de las estrellas según sus propiedades a través de un diagrama. Estos intentos los realizó casi en paralelo Henry Norris Russell quien creó un sistema de clasificación estelar muy similar para 1910.
(Tomado de naukas.com/2011/09/08/cien-anos-del-diagrama-de-hertzsprung-russell-el-grafico-que-organizo-las-estrellas/)
El eje x corresponde con la temperatura superficial en grados kelvin que coincide también con la escala del tipo espectral. Esta clasificación se basa en el color de la estrella que está relacionado con su temperatura superficial como se observa en la imagen1.
El eje y como se mencionó anteriormente, mide la luminosidad tomando al Sol como referencia (Luminosidad del Sol = 1).
Tomado de planetario.malargue.gov.ar/2016/11/24/1604/↩
import matplotlib.pyplot as plt
import pandas as pd
import csv
import os
import numpy as np
%matplotlib notebook
data1 = pd.read_csv('data/dwarfs.csv', skiprows=0)
data1
lum | temp | radius | |
---|---|---|---|
0 | 0.000109 | 5050.644696 | 7.096930 |
1 | 0.000128 | 5967.543450 | 4.583996 |
2 | 0.000230 | 6674.161524 | 4.151078 |
3 | 0.000269 | 7216.762974 | 3.491754 |
4 | 0.000472 | 7795.184395 | 3.472736 |
5 | 0.000613 | 8402.695283 | 3.077338 |
lum1 = data1['lum']
temp1 = data1['temp']
radio1 = data1['radius']
#
ax = plt.gca()
ax.invert_xaxis()
plt.scatter( temp1,lum1, s=radio1)
#plt.colorbar(); # show color scale
#plt.scatter(lum1, temp1)
<matplotlib.collections.PathCollection at 0x7fd0f9597b38>
data2 = pd.read_csv('data/ms.csv', skiprows=0)
data2
lum | temp | radius | |
---|---|---|---|
0 | 0.000776 | 3577.003926 | 0.814703 |
1 | 0.002638 | 3691.168543 | 1.209778 |
2 | 0.006823 | 3793.506494 | 1.630027 |
3 | 0.019733 | 3862.471423 | 2.361574 |
4 | 0.040402 | 3963.530109 | 2.910924 |
... | ... | ... | ... |
85 | 46.302027 | 10625.406634 | 2.528836 |
86 | 177.827941 | 10896.877545 | 4.016161 |
87 | 111.480780 | 11231.323162 | 3.043018 |
88 | 140.345987 | 11709.130116 | 2.944580 |
89 | 303.389118 | 13010.740359 | 2.921536 |
90 rows × 3 columns
lum2 = data2['lum']
temp2 = data2['temp']
radio2 = data2['radius']
#
ax = plt.gca()
ax.invert_xaxis()
plt.scatter( temp2,lum2, s=radio2)
#plt.xscale("log")
plt.yscale("log")
plt.xlabel("Temperatura [K]")
plt.ylabel("Luminosidad [$L_{Sun}$]")
plt.title("Diagrama de Hertzsprung-Russell")
plt.show()
#plt.colorbar(); # show color scale
#plt.scatter(lum1, temp1)
data3 = pd.read_csv('data/giants.txt',delim_whitespace=True)
data3
lum | temp | radius | |
---|---|---|---|
0 | 304.228573 | 3654.601099 | 145.483474 |
1 | 58.884366 | 3808.609875 | 66.642938 |
2 | 9.246982 | 3991.751692 | 27.603430 |
3 | 58.505945 | 4164.818180 | 50.832968 |
4 | 32.033176 | 4425.773883 | 33.290931 |
lum3 = data3['lum']
temp3 = data3['temp']
radio3 = data3['radius']
#
plt.scatter(lum3, temp3, s=radio3)
#plt.scatter(lum1, temp1)
<matplotlib.collections.PathCollection at 0x7fd0f754b0b8>
data4 = pd.read_csv('data/supergiants.txt',delim_whitespace=True)
data4
lum | temp | radius | |
---|---|---|---|
0 | 359749.335156 | 3801.042587 | 278.055832 |
1 | 416869.383470 | 4398.962354 | 190.278395 |
2 | 1000000.000000 | 5465.163392 | 140.809113 |
3 | 920449.571753 | 7837.395137 | 46.187556 |
4 | 779830.110523 | 10200.701561 | 19.604244 |
lum4 = data4['lum']
temp4 = data4['temp']
radio4 = data4['radius']
#
plt.scatter(lum4, temp4, s=radio4)
#plt.scatter(lum1, temp1)
<matplotlib.collections.PathCollection at 0x7fd0f95eb390>
total_lum = pd.concat([lum1,lum2,lum3,lum4])
#len(total_lum)
total_temp = pd.concat([temp1,temp2,temp3,temp4])
total_radio = pd.concat([radio1,radio2,radio3,radio4])
colors = total_temp
plt.scatter( total_temp,total_lum, s=total_radio,c=colors, cmap=plt.cm.RdYlGn)
#plt.scatter( temp1,lum1, s=radio1,color='white',edgecolors='black')
plt.text(10000, 1, "Secuencia principal", family="monospace")
plt.text(8000, 40000, "Super gigantes", family="monospace")
plt.text(5000, 1000, "Gigantes", family="monospace")
plt.text(7000, 0.001, "Enanas blancas", family="monospace")
#plt.text(2.5, 2., "sans-serif", family="sans-serif")
#cbar = plt.colorbar()
ax = plt.gca()
ax.invert_xaxis()
#plt.xscale("log")
plt.yscale("log")
plt.xlabel("Temperatura [K]")
plt.ylabel("Luminosidad [$L_{Sun}$]")
plt.title("Diagrama de Hertzsprung-Russell")
plt.show()
#plt.colorbar(); # show color scale
from matplotlib.animation import FuncAnimation
N = len(total_temp)
fig = plt.figure()
plt.xlim(3000, 15000)
plt.ylim(1e-5, 1e7)
plt.yscale('log')
plt.xlabel("Temperatura [K]")
plt.ylabel("Luminosidad [$L_{Sun}$]")
plt.title("Diagrama de Hertzsprung-Russell")
plt.text(10000, 1, "Secuencia principal", family="monospace")
plt.text(8000, 40000, "Super gigantes", family="monospace")
plt.text(5000, 1000, "Gigantes", family="monospace")
plt.text(7000, 0.001, "Enanas blancas", family="monospace")
ax = plt.gca()
ax.invert_xaxis()
graph, = plt.plot([], [], 'ob')
def animate(i):
graph.set_data(total_temp[:i+1], total_lum[:i+1])
return graph
ani = FuncAnimation(fig, animate, frames=N, interval=200)
plt.show()