]>
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 *
6 from gestion_donnees
import calcule_max_graphique
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:
28 jour_maxi
= calcule_max_graphique(l_jours
)
30 jour_maxi
= conf
["non_sauve"]["maxi"]+1
32 jour_maxi
= conf
["maxi"]+1
35 # On s'assure que c'est bien compris dans les bornes
36 jour_maxi
= max(CONFIG
["jours_mini_courbe"],min(jour_maxi
,CONFIG
["jours_maxi_courbe"]))
37 debug("cree_figure : gestion du jour max ok : "+str(jour_maxi
),liste_err
)
39 # si l'unité n'est pas précisée, ni en "non sauvé" ni par l'utilisateur
40 if conf
["unite"] == "" and conf
["non_sauve"].get("unite","") == "":
41 unite
= choix_unite(jour_maxi
)
42 debug("Unité non précisée, on choisit "+unite
,liste_err
)
43 elif conf
["unite"] != "":
46 unite
= conf
["non_sauve"]["unite"]
48 l_jours_conv
= convertit_tableau(l_jours
,unite
,liste_err
)
49 # Attention, comme les jours commencent à partir de 0, faut enlever 1 pour avoir la borne...
50 age_maxi
= convertitunite(jour_maxi
-1,unite
,liste_err
)
52 debug("cree_figure : conversion des unités ok",liste_err
)
54 titre
= "Courbe de "+typedonnee
+" OMS"
56 if conf
["typecourbe"] == "P":
58 liste_data_labels
= liste_data_labels_p
59 if conf
["sexe"] == "M":
60 fichier_oms
= CONFIG
["fichiersOMS"][typedonnee
]["perc_garcon"]#f_poids_perc_garcon
61 titre
+= " (percentiles, garçon)"
62 elif conf
["sexe"] == "F":
63 fichier_oms
= CONFIG
["fichiersOMS"][typedonnee
]["perc_fille"]
64 titre
+= " (percentiles, fille)"
66 fichier_oms
= CONFIG
["fichiersOMS"][typedonnee
]["perc_mixte"]
67 titre
+= " (percentiles)"
68 elif conf
["typecourbe"] == "Z":
69 liste_data_labels
= liste_data_labels_z
70 if conf
["sexe"] == "M":
71 fichier_oms
= CONFIG
["fichiersOMS"][typedonnee
]["z_garcon"]
72 titre
+= " (moyenne et écarts-types, garçon)"
73 elif conf
["sexe"] == "F":
74 fichier_oms
= CONFIG
["fichiersOMS"][typedonnee
]["z_fille"]
75 titre
+= " (moyenne et écarts-types, fille)"
77 fichier_oms
= CONFIG
["fichiersOMS"][typedonnee
]["z_mixte"]
78 titre
+= " (moyenne et écarts-types)"
80 erreur("Type de courbe invalide"+conf
["typecourbe"],liste_err
)
83 debug("cree_figure : géré le type de courbe ok. Liste des data labels : "+str(liste_data_labels
),liste_err
)
84 debug("Fichier d'où extraire les données : "+fichier_oms
,liste_err
)
86 # Si y'a un nom on met "courbe de machin"
88 titre
+= " de " +conf
["nom"]
91 # convertir les unités
93 #### On extrait les données des courbes, et on convertit les jours dans l'unité voulues
95 t
= lire_fichier_csv(fichier_oms
)
97 liste_err
[0].append("Impossible d'ouvrir le fichier "+fichier_oms
)
100 debug("cree_figure : on va convertir données OMS à la bonne unité",liste_err
)
102 coljour
= convertit_tableau(extraire_colonne(t
,0,jour_maxi
),unite
,liste_err
)
104 erreur("Problème à la conversion du tableau OMS. jour_maxi = "+str(jour_maxi
)+" unite = "+unite
,liste_err
)
107 debug("cree_figure : prête à créer la figure",liste_err
)
109 fig
= plt
.figure(num
=None, figsize
=(conf
["largeur"], conf
["hauteur"]), dpi
=100, facecolor
=conf
["couleurs"]["fond"])
110 plt
.rcParams
['axes.facecolor'] = conf
["couleurs"]["fond"]
111 plt
.rcParams
['axes.edgecolor']= conf
["couleurs"]["cadretxt"]
112 plt
.rcParams
['xtick.color'] = conf
["couleurs"]["cadretxt"]
113 plt
.rcParams
['ytick.color'] = conf
["couleurs"]["cadretxt"]
114 plt
.rcParams
['grid.color'] = conf
["couleurs"]["grille"]
115 plt
.rcParams
['legend.edgecolor'] = conf
["couleurs"]["grille"]
117 #warning("bla"+str(liste_data_labels),liste_err)
118 for (i
,label
,couleur
) in liste_data_labels
:
119 plt
.plot(coljour
,extraire_colonne(t
,i
,jour_maxi
),label
=label
,color
=couleur
)
120 #warning("colonne"+str(i)+str(label)+str(couleur),liste_err)
122 debug("cree_figure : tracé des courbes OMS ok",liste_err
)
124 # On extrait la valeur min et la valeur max des poids
125 (colonne_min
,_
,_
) = liste_data_labels
[-1]
126 (colonne_max
,_
,_
) = liste_data_labels
[0]
128 debug("cree_figure : colonnes min et max : "+str(colonne_min
)+" "+str(colonne_max
),liste_err
)
130 poids_min
= min(extraire_colonne(t
,colonne_min
,jour_maxi
))
131 poids_max
= max(extraire_colonne(t
,colonne_max
,jour_maxi
))
133 poids_min
= min(min(l_poids
),poids_min
)
134 poids_max
= max(max(l_poids
),poids_max
)
135 # On ajuste un peu ces min et max
136 # min : valeur min -1kg
137 poids_min
= max(0,poids_min
-1)
139 poids_max
= poids_max
* 1.05
141 #warning("Jusque là ça marche",liste_err)
142 debug("cree_figure : prête à tracer la courbe de l'enfant",liste_err
)
145 plt
.plot(l_jours_conv
,l_poids
,label
=conf
["nom"],color
=conf
["couleurs"]["cadretxt"],marker
='o')
147 plt
.xlabel("Âge en "+unite
,color
=conf
["couleurs"]["cadretxt"])
148 plt
.ylabel(typedonnee
.capitalize()+" en "+CONFIG
["unites_typedonnees"][typedonnee
],color
=conf
["couleurs"]["cadretxt"])
149 plt
.title(titre
,color
=conf
["couleurs"]["cadretxt"])
150 plt
.axis([0,age_maxi
,poids_min
,poids_max
])
152 if conf
['legende']=="oui":
153 legende
= plt
.legend(loc
=conf
['positionlegende'])
154 plt
.setp(legende
.get_texts(), color
=conf
["couleurs"]["cadretxt"])
155 plt
.grid(conf
["grille"]=="oui")
159 #warning("Jusque là ça marche",liste_err)