1 pièce(s) jointe(s)
Création d'une carte de densité - numpy
Bonjour,
Je me permets de poster quelque chose dans la section car je bloque sur la création de ma carte de densité d'étoiles.
Je crée un diagramme couleur-magnitude (si jamais ça intéresse du monde : CMD) d'un champ stellaire.
Pour ce faire, j'utilise le code que j'ai écrit suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| #!/usr/bin/python
# coding: utf-8
from astropy.io import fits
from astropy.table import Table
from astropy.table import Column
import numpy as np
import matplotlib.pyplot as plt
###################################
# Importation du fichier de champ #
###################################
filename = '/home/valentin/Desktop/Field169_combined_final_roughcal.fits_traite_traiteXY_traiteXY_final'
print 'Fichier en cours de traitement' + str(filename) + '\n'
# Ouverture du fichier à l'aide d'astropy
field = fits.open(filename)
# Lecture des données fits
tbdata = field[1].data
#####################################
# Traçage des différents graphiques #
#####################################
fig1 = plt.figure(1)
plt.plot(tbdata['g0-r0'], tbdata['g0'], '.')
plt.title('Diagramme Couleur-Magnitude')
plt.xlabel('(g0-r0)')
plt.ylabel('g0')
plt.xlim(-1.5,2.5)
plt.ylim(14,28)
plt.gca().invert_yaxis()
plt.show()
print "Création du Diagramme" |
Ok, cela marche bien et j'obtiens le résultat suivant :
Pièce jointe 203518
Néanmoins, j'aimerai faire une boîte de sélection pour afficher sur ce graphique par exemple (ou sur un autre, voir les 2), seulement les étoiles (points) ayant un (g0-r0) compris entre -0.4 < (g0-r0) < 0.8
Ce que je fais, c'est de coder cette sélection :
Code:
1 2 3 4 5 6 7 8 9 10
| #######################################
# Paramètres pour la carte de densité #
#######################################
# Boite des étoiles bleues :
Tri_1 = tbdata[((tbdata['g0-r0']) < 0.8) & (-0.4 < (tbdata['g0-r0']))] # Ne garder que les -0.4 < (g-r)0 < 0.8
print Tri_1 |
Puis je trace :
Code:
1 2 3 4 5 6 7 8 9 10
| fig2 = plt.figure(2)
plt.plot(Tri_1, tbdata['g0'], '.')
plt.title('Diagramme Couleur-Magnitude étoiles bleues')
plt.xlabel('(g0-r0)')
plt.ylabel('g0')
plt.xlim(-1.5,2.5)
plt.ylim(14,28)
plt.gca().invert_yaxis()
plt.show() |
Mais forcément j'ai une erreur de dimension entre x et y. Ce qu'il faut faire c'est donc récupérer uniquement les valeurs de la colonne g0 correspondant aux lignes qui respectent mon Tri_1
Mais je bloque sur la façon d'écrire cela ...
==> En gros la question c'est, comment faire une boîte de sélection :roll:
Mon fichier fits se compose de la façon suivante :
ID RA DEC NDET DEPTHFLAG SEPINDX [65] SEPFINDX [65] U UERR G GERR R RERR I IERR Z ZERR CHI SHARP FLAG PROB EBV g0 r0 i0 z0 X Y g0-r0
------------- ---------- ---------- ---- --------- ------------ ------------- ----- ---- ------- --------- ------- --------- ------- ---------- ------- ---------- -------- --------- ---- ---- --------- ------- ------- ------- ------- ------- ------- -------- --------
Field169.1255 184.766833 -30.472462 17 3 1254 .. -1 1254 .. -1 99.99 9.99 21.4875 0.0100426 20.0497 0.0070361 18.9002 0.00376412 18.4352 0.00425852 0.911594 -0.212171 -1 0.87 0.0709362 21.257831573486328, 19.895366668701172, 18.787057876586914, 18.348880767822266, -0.23369831258206375, 0.98211750000000109, 1.3624649047851562
Sur environ 200.000 lignes
Merci d'avance pour votre aide !