]>
git.immae.eu Git - perso/Denise/oms.git/blob - trace_courbe.py
2 # -*- coding: utf-8 -*-
3 from configuration
import *
4 from gestionOMS
import *
5 from gestion_unites
import *
7 import matplotlib
.pyplot
as plt
9 def cree_figure(conf
,l_jours
,l_poids
,liste_err
):
10 debug("debut de cree_figure",liste_err
)
12 liste_data_labels_p
,liste_data_labels_z
= renvoie_liste_labels(conf
,liste_data_choisie_p
,liste_data_choisie_z
,liste_err
)
14 erreur("bug avec liste data labels",liste_err
)
19 jour_maxi
= max(l_jours
)# pas la peine d'aller très au delà du jour max
20 jour_maxi
= int(jour_maxi
* 1.1)+3 # on rajoute un peu
22 jour_maxi
= CONFIG
["jours_defaut_donneesvides"] # si pas de données, arbitrairement on met ça
24 jour_maxi
= conf
["maxi"]+1
27 # On s'assure que c'est bien compris dans les bornes
28 jour_maxi
= max(CONFIG
["jours_mini_courbe"],min(jour_maxi
,CONFIG
["jours_maxi_courbe"]))
29 debug("cree_figure : gestion du jour max ok : "+str(jour_maxi
),liste_err
)
31 if conf
["unite"] == "":
32 conf
["unite"] = choix_unite(jour_maxi
)
34 l_jours_conv
= convertit_tableau(l_jours
,conf
["unite"],liste_err
)
35 # Attention, comme les jours commencent à partir de 0, faut enlever 1 pour avoir la borne...
36 age_maxi
= convertitunite(jour_maxi
-1,conf
["unite"],liste_err
)
38 debug("cree_figure : conversion des unités ok",liste_err
)
40 titre
= "Courbe de poids OMS"
42 if conf
["typecourbe"] == "P":
44 liste_data_labels
= liste_data_labels_p
45 if conf
["sexe"] == "M":
46 fichier_oms
= f_poids_perc_garcon
47 titre
+= " (percentiles, garçon)"
48 elif conf
["sexe"] == "F":
49 fichier_oms
= f_poids_perc_fille
50 titre
+= " (percentiles, fille)"
52 fichier_oms
= f_poids_perc_mixte
53 titre
+= " (percentiles)"
54 elif conf
["typecourbe"] == "Z":
55 liste_data_labels
= liste_data_labels_z
56 if conf
["sexe"] == "G":
57 fichier_oms
= f_poids_z_garcon
58 titre
+= " (moyenne et écarts-types, garçon)"
59 elif conf
["sexe"] == "F":
60 fichier_oms
= f_poids_z_fille
61 titre
+= " (moyenne et écarts-types, fille)"
63 fichier_oms
= f_poids_z_mixte
64 titre
+= " (moyenne et écarts-types)"
66 erreur("Type de courbe invalide"+conf
["typecourbe"],liste_err
)
69 debug("cree_figure : géré le type de courbe ok",liste_err
)
71 # Si y'a un nom on met "courbe de machin"
73 titre
+= " de " +conf
["nom"]
76 # convertir les unités
78 #### On extrait les données des courbes, et on convertit les jours dans l'unité voulues
80 t
= lire_fichier_csv(fichier_oms
)
82 liste_err
[0].append("Impossible d'ouvrir le fichier "+fichier_oms
)
85 debug("cree_figure : on va convertir données OMS à la bonne unité",liste_err
)
87 coljour
= convertit_tableau(extraire_colonne(t
,0,jour_maxi
),conf
["unite"],liste_err
)
89 erreur("Problème à la conversion du tableau OMS. jour_maxi = "+str(jour_maxi
)+" unite = "+unite
,liste_err
)
92 debug("cree_figure : prête à créer la figure",liste_err
)
94 fig
= plt
.figure(num
=None, figsize
=(conf
["largeur"], conf
["hauteur"]), dpi
=100, facecolor
=conf
["couleurs"]["fond"])
95 plt
.rcParams
['axes.facecolor'] = conf
["couleurs"]["fond"]
96 plt
.rcParams
['axes.edgecolor']= conf
["couleurs"]["cadretxt"]
97 plt
.rcParams
['xtick.color'] = conf
["couleurs"]["cadretxt"]
98 plt
.rcParams
['ytick.color'] = conf
["couleurs"]["cadretxt"]
99 plt
.rcParams
['grid.color'] = conf
["couleurs"]["grille"]
100 plt
.rcParams
['legend.edgecolor'] = conf
["couleurs"]["grille"]
102 #warning("bla"+str(liste_data_labels),liste_err)
103 for (i
,label
,couleur
) in liste_data_labels
:
104 plt
.plot(coljour
,extraire_colonne(t
,i
,jour_maxi
),label
=label
,color
=couleur
)
105 #warning("colonne"+str(i)+str(label)+str(couleur),liste_err)
107 debug("cree_figure : tracé des courbes OMS ok",liste_err
)
109 # On extrait la valeur min et la valeur max des poids
110 (colonne_min
,_
,_
) = liste_data_labels
[-1]
111 (colonne_max
,_
,_
) = liste_data_labels
[0]
113 poids_min
= min(extraire_colonne(t
,colonne_min
,jour_maxi
))
114 poids_max
= max(extraire_colonne(t
,colonne_max
,jour_maxi
))
116 poids_min
= min(min(l_poids
),poids_min
)
117 poids_max
= max(max(l_poids
),poids_max
)
118 # On ajuste un peu ces min et max
119 # min : valeur min -1kg
120 poids_min
= max(0,poids_min
-1)
122 poids_max
= poids_max
* 1.05
124 #warning("Jusque là ça marche",liste_err)
125 debug("cree_figure : prête à tracer la courbe de l'enfant",liste_err
)
128 plt
.plot(l_jours_conv
,l_poids
,label
=conf
["nom"],color
=conf
["couleurs"]["cadretxt"],marker
='o')
130 plt
.xlabel("Âge en "+conf
["unite"],color
=conf
["couleurs"]["cadretxt"])
131 plt
.ylabel("Poids en kg",color
=conf
["couleurs"]["cadretxt"])
132 plt
.title(titre
,color
=conf
["couleurs"]["cadretxt"])
133 plt
.axis([0,age_maxi
,poids_min
,poids_max
])
135 if conf
['legende']=="oui":
136 legende
= plt
.legend(loc
=conf
['positionlegende'])
137 plt
.setp(legende
.get_texts(), color
=conf
["couleurs"]["cadretxt"])
138 plt
.grid(conf
["grille"]=="oui")
142 #warning("Jusque là ça marche",liste_err)