2 # -*- coding: utf-8 -*-
3 from configuration
import CONFIG
4 from gestionOMS
import *
5 from gestion_unites
import *
6 from gestion_donnees
import calcule_max_graphique
, convertit_jours_vers_python
8 import matplotlib
.pyplot
as plt
10 # Essentiellement, la fonction qui trace la courbe
13 def cree_figure(conf
,l_jours
,l_poids
,typedonnee
,liste_err
):
14 debug("debut de cree_figure",liste_err
)
16 liste_data_labels_p
,liste_data_labels_z
= renvoie_liste_labels(conf
,CONFIG
["liste_data_choisie_p"],CONFIG
["liste_data_choisie_z"],liste_err
)
18 erreur("bug avec liste data labels",liste_err
)
21 # maxi saisi par l'utilisateur ?
23 # Est-ce qu'on a donné un maxi quand même (car même échelle) ?
25 print(conf
["non_sauve"])
26 if conf
["non_sauve"].get("maxi",0) == 0:
27 jour_maxi
= calcule_max_graphique(l_jours
)
29 jour_maxi
= conf
["non_sauve"]["maxi"]+1
31 jour_maxi
= conf
["maxi"]+1
34 # On s'assure que c'est bien compris dans les bornes
35 jour_maxi
= max(CONFIG
["jours_mini_courbe"],min(jour_maxi
,CONFIG
["jours_maxi_courbe"]))
36 debug("cree_figure : gestion du jour max ok : "+str(jour_maxi
),liste_err
)
38 # si l'unité n'est pas précisée, ni en "non sauvé" ni par l'utilisateur
39 if conf
["unite"] == "" and conf
["non_sauve"].get("unite","") == "":
40 unite
= choix_unite(jour_maxi
)
41 debug("Unité non précisée, on choisit "+unite
,liste_err
)
42 elif conf
["unite"] != "":
45 unite
= conf
["non_sauve"]["unite"]
47 #debug("prématurité dans la config : "+conf["prematurite"],liste_err)
48 prema
= int(convertit_jours_vers_python(conf
["prematurite"],liste_err
))
49 ## Gestion des prémas, deux cas :
50 # Si agecorrige est oui, alors on veut juste soustraire la valeur de préma
51 # à toutes les données.
52 # Si agecorrige est non, alors on veut ajouter la valeur de préma aux courbes de référence.
54 debug("Prématurité : "+str(prema
)+"age corrigé : "+conf
["agecorrige"],liste_err
)
57 if prema
>0 and conf
["agecorrige"] == "oui":
58 l_jours
= [j
-prema
for j
in l_jours
]
59 jour_maxi
= jour_maxi
- prema
60 # debug("liste des jours : "+str(l_jours),liste_err)
62 debug("bla",liste_err
)
63 l_jours_conv
= convertit_tableau(l_jours
,unite
,liste_err
)
64 # Attention, comme les jours commencent à partir de 0, faut enlever 1 pour avoir la borne...
65 age_maxi
= convertitunite(jour_maxi
-1,unite
,liste_err
)
67 debug("cree_figure : conversion des unités ok : "+str(l_jours_conv
),liste_err
)
69 titre
= "Courbe de "+typedonnee
+" OMS"
71 if conf
["typecourbe"] == "P":
73 liste_data_labels
= liste_data_labels_p
74 if conf
["sexe"] == "M":
75 fichier_oms
= CONFIG
["fichiersOMS"][typedonnee
]["perc_garcon"]#f_poids_perc_garcon
76 titre
+= " (percentiles, garçon)"
77 elif conf
["sexe"] == "F":
78 fichier_oms
= CONFIG
["fichiersOMS"][typedonnee
]["perc_fille"]
79 titre
+= " (percentiles, fille)"
81 fichier_oms
= CONFIG
["fichiersOMS"][typedonnee
]["perc_mixte"]
82 titre
+= " (percentiles)"
83 elif conf
["typecourbe"] == "Z":
84 liste_data_labels
= liste_data_labels_z
85 if conf
["sexe"] == "M":
86 fichier_oms
= CONFIG
["fichiersOMS"][typedonnee
]["z_garcon"]
87 titre
+= " (moyenne et écarts-types, garçon)"
88 elif conf
["sexe"] == "F":
89 fichier_oms
= CONFIG
["fichiersOMS"][typedonnee
]["z_fille"]
90 titre
+= " (moyenne et écarts-types, fille)"
92 fichier_oms
= CONFIG
["fichiersOMS"][typedonnee
]["z_mixte"]
93 titre
+= " (moyenne et écarts-types)"
95 erreur("Type de courbe invalide"+conf
["typecourbe"],liste_err
)
98 # Si y'a un nom on met "courbe de machin"
100 titre
+= " de " +conf
["nom"]
104 titre
+= ", préma de "+conf
["prematurite"]
105 if conf
["agecorrige"] == "oui":
106 titre
+=" (courbe en âge corrigé)"
108 titre
+=" (courbe en âge réel, données OMS décalées)"
110 debug("cree_figure : géré le type de courbe ok. Liste des data labels : "+str(liste_data_labels
),liste_err
)
111 debug("Fichier d'où extraire les données : "+fichier_oms
,liste_err
)
115 # convertir les unités
117 #### On extrait les données des courbes, et on convertit les jours dans l'unité voulues
119 t
= lire_fichier_csv(fichier_oms
)
121 liste_err
[0].append("Impossible d'ouvrir le fichier "+fichier_oms
)
124 debug("cree_figure : on va convertir données OMS à la bonne unité",liste_err
)
126 coljour
= (extraire_colonne(t
,0,jour_maxi
))
127 if prema
>0 and conf
["agecorrige"] != "oui":
128 coljour
= [j
+ prema
for j
in coljour
]
129 coljour
= convertit_tableau(coljour
,unite
,liste_err
)
131 erreur("Problème à la conversion du tableau OMS. jour_maxi = "+str(jour_maxi
)+" unite = "+unite
,liste_err
)
134 debug("cree_figure : prête à créer la figure",liste_err
)
135 #### La figure, params
137 fig
= plt
.figure(num
=None, figsize
=(conf
["largeur"], conf
["hauteur"]), dpi
=100, facecolor
=conf
["couleurs"]["fond"])
138 plt
.rcParams
['axes.facecolor'] = conf
["couleurs"]["fond"]
139 plt
.rcParams
['axes.edgecolor']= conf
["couleurs"]["cadretxt"]
140 plt
.rcParams
['xtick.color'] = conf
["couleurs"]["cadretxt"]
141 plt
.rcParams
['ytick.color'] = conf
["couleurs"]["cadretxt"]
142 plt
.rcParams
['grid.color'] = conf
["couleurs"]["grille"]
143 plt
.rcParams
['legend.edgecolor'] = conf
["couleurs"]["grille"]
145 #warning("bla"+str(liste_data_labels),liste_err)
146 for (i
,label
,couleur
) in liste_data_labels
:
147 plt
.plot(coljour
,extraire_colonne(t
,i
,jour_maxi
),label
=label
,color
=couleur
)
148 #warning("colonne"+str(i)+str(label)+str(couleur),liste_err)
150 debug("cree_figure : tracé des courbes OMS ok",liste_err
)
152 # On extrait la valeur min et la valeur max des poids
153 (colonne_min
,_
,_
) = liste_data_labels
[-1]
154 (colonne_max
,_
,_
) = liste_data_labels
[0]
156 debug("cree_figure : colonnes min et max : "+str(colonne_min
)+" "+str(colonne_max
),liste_err
)
158 poids_min
= min(extraire_colonne(t
,colonne_min
,jour_maxi
))
159 poids_max
= max(extraire_colonne(t
,colonne_max
,jour_maxi
))
161 poids_min
= min(min(l_poids
),poids_min
)
162 poids_max
= max(max(l_poids
),poids_max
)
163 # On ajuste un peu ces min et max
164 # min : valeur min -1kg
165 poids_min
= max(0,poids_min
-1)
167 poids_max
= poids_max
* 1.05
169 #warning("Jusque là ça marche",liste_err)
170 debug("cree_figure : prête à tracer la courbe de l'enfant",liste_err
)
173 ### Tracé pour de bon
175 plt
.plot(l_jours_conv
,l_poids
,label
=conf
["nom"],color
=conf
["couleurs"]["cadretxt"],marker
='o')
176 debug("Tracé de la courbe enfant, avec les jours "+str(l_jours_conv
),liste_err
)
178 plt
.xlabel("Âge en "+unite
,color
=conf
["couleurs"]["cadretxt"])
179 plt
.ylabel(typedonnee
.capitalize()+" en "+CONFIG
["unites_typedonnees"][typedonnee
],color
=conf
["couleurs"]["cadretxt"])
180 plt
.title(titre
,color
=conf
["couleurs"]["cadretxt"])
181 plt
.axis([min(0,l_jours_conv
[0]),age_maxi
,poids_min
,poids_max
])
183 if conf
['legende']=="oui":
184 legende
= plt
.legend(loc
=conf
['positionlegende'])
185 plt
.setp(legende
.get_texts(), color
=conf
["couleurs"]["cadretxt"])
186 plt
.grid(conf
["grille"]=="oui")
190 #warning("Jusque là ça marche",liste_err)