]>
git.immae.eu Git - perso/Denise/oms.git/blob - trace_courbe.py
2 # -*- coding: utf-8 -*-
3 from configuration
import CONFIG
4 from gestionOMS
import *
5 from gestion_unites
import *
7 import matplotlib
.pyplot
as plt
9 # Essentiellement, la fonction qui trace la courbe
12 def cree_figure(conf
,l_jours
,l_poids
,liste_err
):
13 debug("debut de cree_figure",liste_err
)
15 liste_data_labels_p
,liste_data_labels_z
= renvoie_liste_labels(conf
,CONFIG
["liste_data_choisie_p"],CONFIG
["liste_data_choisie_z"],liste_err
)
17 erreur("bug avec liste data labels",liste_err
)
22 jour_maxi
= max(l_jours
)# pas la peine d'aller très au delà du jour max
23 jour_maxi
= int(jour_maxi
* 1.1)+3 # on rajoute un peu
25 jour_maxi
= CONFIG
["jours_defaut_donneesvides"] # si pas de données, arbitrairement on met ça
27 jour_maxi
= conf
["maxi"]+1
30 # On s'assure que c'est bien compris dans les bornes
31 jour_maxi
= max(CONFIG
["jours_mini_courbe"],min(jour_maxi
,CONFIG
["jours_maxi_courbe"]))
32 debug("cree_figure : gestion du jour max ok : "+str(jour_maxi
),liste_err
)
34 if conf
["unite"] == "":
35 conf
["unite"] = choix_unite(jour_maxi
)
37 l_jours_conv
= convertit_tableau(l_jours
,conf
["unite"],liste_err
)
38 # Attention, comme les jours commencent à partir de 0, faut enlever 1 pour avoir la borne...
39 age_maxi
= convertitunite(jour_maxi
-1,conf
["unite"],liste_err
)
41 debug("cree_figure : conversion des unités ok",liste_err
)
43 titre
= "Courbe de poids OMS"
45 if conf
["typecourbe"] == "P":
47 liste_data_labels
= liste_data_labels_p
48 if conf
["sexe"] == "M":
49 fichier_oms
= CONFIG
["fichiersOMS"]["perc_garcon"]#f_poids_perc_garcon
50 titre
+= " (percentiles, garçon)"
51 elif conf
["sexe"] == "F":
52 fichier_oms
= CONFIG
["fichiersOMS"]["perc_fille"]
53 titre
+= " (percentiles, fille)"
55 fichier_oms
= CONFIG
["fichiersOMS"]["perc_mixte"]
56 titre
+= " (percentiles)"
57 elif conf
["typecourbe"] == "Z":
58 liste_data_labels
= liste_data_labels_z
59 if conf
["sexe"] == "M":
60 fichier_oms
= CONFIG
["fichiersOMS"]["z_garcon"]
61 titre
+= " (moyenne et écarts-types, garçon)"
62 elif conf
["sexe"] == "F":
63 fichier_oms
= CONFIG
["fichiersOMS"]["z_fille"]
64 titre
+= " (moyenne et écarts-types, fille)"
66 fichier_oms
= CONFIG
["fichiersOMS"]["z_mixte"]
67 titre
+= " (moyenne et écarts-types)"
69 erreur("Type de courbe invalide"+conf
["typecourbe"],liste_err
)
72 debug("cree_figure : géré le type de courbe ok. Liste des data labels : "+str(liste_data_labels
),liste_err
)
73 debug("Fichier d'où extraire les données : "+fichier_oms
,liste_err
)
75 # Si y'a un nom on met "courbe de machin"
77 titre
+= " de " +conf
["nom"]
80 # convertir les unités
82 #### On extrait les données des courbes, et on convertit les jours dans l'unité voulues
84 t
= lire_fichier_csv(fichier_oms
)
86 liste_err
[0].append("Impossible d'ouvrir le fichier "+fichier_oms
)
89 debug("cree_figure : on va convertir données OMS à la bonne unité",liste_err
)
91 coljour
= convertit_tableau(extraire_colonne(t
,0,jour_maxi
),conf
["unite"],liste_err
)
93 erreur("Problème à la conversion du tableau OMS. jour_maxi = "+str(jour_maxi
)+" unite = "+unite
,liste_err
)
96 debug("cree_figure : prête à créer la figure",liste_err
)
98 fig
= plt
.figure(num
=None, figsize
=(conf
["largeur"], conf
["hauteur"]), dpi
=100, facecolor
=conf
["couleurs"]["fond"])
99 plt
.rcParams
['axes.facecolor'] = conf
["couleurs"]["fond"]
100 plt
.rcParams
['axes.edgecolor']= conf
["couleurs"]["cadretxt"]
101 plt
.rcParams
['xtick.color'] = conf
["couleurs"]["cadretxt"]
102 plt
.rcParams
['ytick.color'] = conf
["couleurs"]["cadretxt"]
103 plt
.rcParams
['grid.color'] = conf
["couleurs"]["grille"]
104 plt
.rcParams
['legend.edgecolor'] = conf
["couleurs"]["grille"]
106 #warning("bla"+str(liste_data_labels),liste_err)
107 for (i
,label
,couleur
) in liste_data_labels
:
108 plt
.plot(coljour
,extraire_colonne(t
,i
,jour_maxi
),label
=label
,color
=couleur
)
109 #warning("colonne"+str(i)+str(label)+str(couleur),liste_err)
111 debug("cree_figure : tracé des courbes OMS ok",liste_err
)
113 # On extrait la valeur min et la valeur max des poids
114 (colonne_min
,_
,_
) = liste_data_labels
[-1]
115 (colonne_max
,_
,_
) = liste_data_labels
[0]
117 debug("cree_figure : colonnes min et max : "+str(colonne_min
)+" "+str(colonne_max
),liste_err
)
119 poids_min
= min(extraire_colonne(t
,colonne_min
,jour_maxi
))
120 poids_max
= max(extraire_colonne(t
,colonne_max
,jour_maxi
))
122 poids_min
= min(min(l_poids
),poids_min
)
123 poids_max
= max(max(l_poids
),poids_max
)
124 # On ajuste un peu ces min et max
125 # min : valeur min -1kg
126 poids_min
= max(0,poids_min
-1)
128 poids_max
= poids_max
* 1.05
130 #warning("Jusque là ça marche",liste_err)
131 debug("cree_figure : prête à tracer la courbe de l'enfant",liste_err
)
134 plt
.plot(l_jours_conv
,l_poids
,label
=conf
["nom"],color
=conf
["couleurs"]["cadretxt"],marker
='o')
136 plt
.xlabel("Âge en "+conf
["unite"],color
=conf
["couleurs"]["cadretxt"])
137 plt
.ylabel("Poids en kg",color
=conf
["couleurs"]["cadretxt"])
138 plt
.title(titre
,color
=conf
["couleurs"]["cadretxt"])
139 plt
.axis([0,age_maxi
,poids_min
,poids_max
])
141 if conf
['legende']=="oui":
142 legende
= plt
.legend(loc
=conf
['positionlegende'])
143 plt
.setp(legende
.get_texts(), color
=conf
["couleurs"]["cadretxt"])
144 plt
.grid(conf
["grille"]=="oui")
148 #warning("Jusque là ça marche",liste_err)