summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenise sur Lya <sekhmet@lya>2021-02-15 16:54:33 +0100
committerDenise sur Lya <sekhmet@lya>2021-02-15 16:54:33 +0100
commit685a5f75f63d483d09a593ec69efad882a63a34e (patch)
tree8d8b4ee683d3abbf0496d3807bef087d313e3a39
parentc2fe511bb9e6974cc267b8926a47b1fa81b37da3 (diff)
downloadoms-685a5f75f63d483d09a593ec69efad882a63a34e.tar.gz
oms-685a5f75f63d483d09a593ec69efad882a63a34e.tar.zst
oms-685a5f75f63d483d09a593ec69efad882a63a34e.zip
amélioration de la grille, bêta
-rw-r--r--data/changelog_data.txt2
-rw-r--r--gestion_donnees.py7
-rw-r--r--gestion_unites.py61
-rw-r--r--templates/index.html1
-rw-r--r--trace_courbe.py55
5 files changed, 117 insertions, 9 deletions
diff --git a/data/changelog_data.txt b/data/changelog_data.txt
index 09a6da4..f59e7b7 100644
--- a/data/changelog_data.txt
+++ b/data/changelog_data.txt
@@ -1,3 +1,5 @@
1"Version 2.26","15/02/2021","<p>Nouveauté en bêta-test : grille améliorée. Pour le moment on peut cocher pour avoir cette fonctionnalité.</p>"
2
1"Version 2.25","12/02/2021","<p>Nouveauté : possibilité de ""prolonger"" la courbe de poids/taille en pointillés. L'extrapolation est faite à partir de la dernière donnée. À tester encore !</p>" 3"Version 2.25","12/02/2021","<p>Nouveauté : possibilité de ""prolonger"" la courbe de poids/taille en pointillés. L'extrapolation est faite à partir de la dernière donnée. À tester encore !</p>"
2 4
3"Version 2.2001","13/11/2020","<p>Amélioration de l'affichage pour les prémas (masqués par défaut). Précision dans le texte + FAQ.</p>" 5"Version 2.2001","13/11/2020","<p>Amélioration de l'affichage pour les prémas (masqués par défaut). Précision dans le texte + FAQ.</p>"
diff --git a/gestion_donnees.py b/gestion_donnees.py
index c378b5e..208be4a 100644
--- a/gestion_donnees.py
+++ b/gestion_donnees.py
@@ -193,7 +193,7 @@ def gere_configuration(data,liste_err):
193 """ prend en argument le dictionnaire de requête (configuration imparfaite), et 193 """ prend en argument le dictionnaire de requête (configuration imparfaite), et
194 construit le dictionnaire de configuration qui va bien. 194 construit le dictionnaire de configuration qui va bien.
195 Vérifie que chaque entrée est cohérente évidemment.""" 195 Vérifie que chaque entrée est cohérente évidemment."""
196 configuration = {} 196 configuration = {"non_sauve": {}}
197 197
198 # Pour le nom, osef qu'il soit vide 198 # Pour le nom, osef qu'il soit vide
199 nom = data.get("nom","") 199 nom = data.get("nom","")
@@ -292,15 +292,14 @@ def gere_configuration(data,liste_err):
292 292
293 configuration["prolongercourbes"] = gere_checkbox(data.get("prolongercourbes","")) 293 configuration["prolongercourbes"] = gere_checkbox(data.get("prolongercourbes",""))
294 294
295 configuration["non_sauve"]["grilleamelio"] = gere_checkbox(data.get("grilleamelio",""))
295 296
296 configuration["couleurs"] = {} 297 configuration["couleurs"] = {}
297 # gérer les couleurs 298 # gérer les couleurs
298 for clecouleur in DEFAUT["couleurs"]: 299 for clecouleur in DEFAUT["couleurs"]:
299 coul = rgb_vers_tuple(data.get("couleur_"+clecouleur,""),CONFIG["couleurs"][clecouleur],liste_err) 300 coul = rgb_vers_tuple(data.get("couleur_"+clecouleur,""),CONFIG["couleurs"][clecouleur],liste_err)
300 configuration["couleurs"][clecouleur] = coul 301 configuration["couleurs"][clecouleur] = coul
301 302
302 # On y ajoute la partie "non sauvée" qui servira peut-être plus tard
303 configuration["non_sauve"] = {}
304 303
305 return configuration 304 return configuration
306 305
diff --git a/gestion_unites.py b/gestion_unites.py
index 8fcb1ad..b97d90b 100644
--- a/gestion_unites.py
+++ b/gestion_unites.py
@@ -7,7 +7,7 @@ from gestion_erreurs import *
7##################### outils pour affichage et choix de l'unité 7##################### outils pour affichage et choix de l'unité
8 8
9def choix_unite(maxi): 9def choix_unite(maxi):
10 """ en fonction de l'âge maxi, on choisit une unité pertinente : jours, mois, année""" 10 """ en fonction de l'âge maxi, on choisit une unité pertinente : jours, semaine, mois, année"""
11 if maxi<40: 11 if maxi<40:
12 return "jours" 12 return "jours"
13 elif maxi <100: 13 elif maxi <100:
@@ -17,6 +17,65 @@ def choix_unite(maxi):
17 else: 17 else:
18 return "années" 18 return "années"
19 19
20def choix_echelle_data(typedonnees, donneemax):
21 """ en fonction du type de données et du maxi (on suppose qu'on part à 0),
22 on choisit un intervalle raisonnable
23 On renvoie le couple des pas (majeur, mineur)
24 (0,0) en cas de problème avec le typedonnnes """
25
26 if typedonnees not in CONFIG["liste_typedonnees"]:
27 print("Type de données non valide : "+typedonnees)
28 return (0,0)
29
30 if typedonnees == "poids":
31 if donneemax>15:
32 return (5,1)
33 elif donneemax > 10:
34 return (2,1)
35 else:
36 return (1,0.2)
37 if typedonnees == "taille":
38 if donneemax>100:
39 return (10,2)
40 else:
41 return (5,1)
42
43def choix_echelle_temps(unite, tempsmaxi):
44 """ en fonction de l'unité voulue et du temps maximal (donné dans l'unité),
45 on choisit un intervalle raisonnable entre les pas.
46 On renvoie le couple des pas (majeur, mineur).
47 (0,0) en cas de problème avec l'unité
48 On met 0 en 2e arg si pas de grille secondaire"""
49 if unite not in CONFIG["liste_unites"]:
50 print("Unité non valide ! "+unite)
51 return (0,0)
52
53 if unite=="jours":
54 if tempsmaxi > 60: # pourquoi mettre en jours ?
55 return (30,1)
56 elif tempsmaxi >20:
57 return (7,1)
58 else:
59 return (1,0)
60 if unite=="semaines":
61 if tempsmaxi >50:
62 return (5,1)
63 elif tempsmaxi > 15:
64 return (2,1)
65 else:
66 return (1,1/7) # On met en jours
67
68 if unite=="mois":
69 if tempsmaxi > 30:
70 return (2,1)
71 elif tempsmaxi > 10:
72 return (1,0)
73 else:
74 return (1,0.25) # on met en semaines
75
76 if unite=="années":
77 return (1,1/12) # années / mois
78
20def convertitunite(jours,unite,liste_err): 79def convertitunite(jours,unite,liste_err):
21 """ convertit des jours à l'unité voulue 80 """ convertit des jours à l'unité voulue
22 renvoie des float""" 81 renvoie des float"""
diff --git a/templates/index.html b/templates/index.html
index 959c6a1..e5d4d24 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -96,6 +96,7 @@
96 <li>Prolonger les courbes (expérimental) : <input type="checkbox" name="prolongercourbes" {% if valform.prolongercourbes == "oui" %} checked{% endif%}></li> 96 <li>Prolonger les courbes (expérimental) : <input type="checkbox" name="prolongercourbes" {% if valform.prolongercourbes == "oui" %} checked{% endif%}></li>
97 97
98 <li><label>Même échelle sur tous les graphiques&nbsp;: </label><input type="checkbox" name="memechelle" {% if valform.memechelle == 'oui' %} checked{% endif %}></li> 98 <li><label>Même échelle sur tous les graphiques&nbsp;: </label><input type="checkbox" name="memechelle" {% if valform.memechelle == 'oui' %} checked{% endif %}></li>
99 <li><label>Grille améliorée (bêta)&nbsp;:</label><input type="checkbox" name="grilleamelio"></li>
99 <li>Dimensions du graphique&nbsp;: <label>largeur&nbsp;: </label><input type="text" name="largeur" value="{{ valform.largeur }}"> 100 <li>Dimensions du graphique&nbsp;: <label>largeur&nbsp;: </label><input type="text" name="largeur" value="{{ valform.largeur }}">
100 <label>hauteur&nbsp;: </label><input type="text" name="hauteur" value="{{ valform.hauteur }}"></li> 101 <label>hauteur&nbsp;: </label><input type="text" name="hauteur" value="{{ valform.hauteur }}"></li>
101 <li><label>Légende&nbsp;: <input type="checkbox" name="legende" {% if valform.legende == 'oui' %} checked{% endif %}> </label> 102 <li><label>Légende&nbsp;: <input type="checkbox" name="legende" {% if valform.legende == 'oui' %} checked{% endif %}> </label>
diff --git a/trace_courbe.py b/trace_courbe.py
index fab6471..9cb4845 100644
--- a/trace_courbe.py
+++ b/trace_courbe.py
@@ -4,6 +4,7 @@ from configuration import CONFIG
4from gestionOMS import * 4from gestionOMS import *
5from gestion_unites import * 5from gestion_unites import *
6from gestion_donnees import calcule_max_graphique, convertit_jours_vers_python 6from gestion_donnees import calcule_max_graphique, convertit_jours_vers_python
7from numpy import arange
7 8
8import matplotlib.pyplot as plt 9import matplotlib.pyplot as plt
9 10
@@ -139,10 +140,11 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err):
139 plt.rcParams['ytick.color'] = conf["couleurs"]["cadretxt"] 140 plt.rcParams['ytick.color'] = conf["couleurs"]["cadretxt"]
140 plt.rcParams['grid.color'] = conf["couleurs"]["grille"] 141 plt.rcParams['grid.color'] = conf["couleurs"]["grille"]
141 plt.rcParams['legend.edgecolor'] = conf["couleurs"]["grille"] 142 plt.rcParams['legend.edgecolor'] = conf["couleurs"]["grille"]
143 ax = plt.axes()
142 144
143 #Tracé des courbes OMS 145 #Tracé des courbes OMS
144 for (i,label,couleur) in liste_data_labels: 146 for (i,label,couleur) in liste_data_labels:
145 plt.plot(coljour,extraire_colonne(t,i,jour_maxi),label=label,color=couleur) 147 ax.plot(coljour,extraire_colonne(t,i,jour_maxi),label=label,color=couleur)
146 #warning("colonne"+str(i)+str(label)+str(couleur),liste_err) 148 #warning("colonne"+str(i)+str(label)+str(couleur),liste_err)
147 149
148 debug("cree_figure : tracé des courbes OMS ok",liste_err) 150 debug("cree_figure : tracé des courbes OMS ok",liste_err)
@@ -166,13 +168,13 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err):
166 poids_min = max(0,poids_min-1) 168 poids_min = max(0,poids_min-1)
167 #max : +5% 169 #max : +5%
168 poids_max = poids_max * 1.05 170 poids_max = poids_max * 1.05
169 171
170 172
171 debug("cree_figure : prête à tracer la courbe de l'enfant",liste_err) 173 debug("cree_figure : prête à tracer la courbe de l'enfant",liste_err)
172 174
173 ### Tracé pour de bon 175 ### Tracé pour de bon
174 if l_jours != []: 176 if l_jours != []:
175 plt.plot(l_jours_conv,l_poids,label=conf["nom"],color=conf["couleurs"]["cadretxt"],marker='o') 177 ax.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 debug("Tracé de la courbe enfant, avec les jours "+str(l_jours_conv),liste_err)
177 179
178 #### extrapolatios éventuelles 180 #### extrapolatios éventuelles
@@ -192,6 +194,48 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err):
192 else: 194 else:
193 debug("On ne trace pas de courbe enfant", liste_err) 195 debug("On ne trace pas de courbe enfant", liste_err)
194 196
197 debug("Début de la gestion de l'échelle", liste_err)
198 ### échelle à régler
199
200 if conf["non_sauve"]["grilleamelio"] == "oui":
201
202 pas=choix_echelle_data(typedonnee, poids_max)
203 # data_min_arrondie
204 minechelle = int(poids_min/pas[0])*pas[0]
205
206 debug("pas choisis pour l'échelle en y : "+str(pas), liste_err)
207 echellemajeure = arange(minechelle, poids_max, pas[0])
208
209 if pas[1] >0:
210 echellemineure = arange(minechelle, poids_max, pas[1])
211 else:
212 echellemineure = []
213
214 ax.set_yticks(echellemajeure, minor=False)
215 ax.set_yticks(echellemineure, minor=True)
216
217 # échelle en temps
218 pas=choix_echelle_temps(unite, age_maxi)
219 debug("pas choisis pour l'échelle en x : "+str(pas), liste_err)
220
221 echellemajeure = arange(0,age_maxi, pas[0])
222 if pas[1] >0:
223 echellemineure = arange(0,age_maxi, pas[1])
224 else:
225 echellemineure = []
226 ax.set_xticks(echellemajeure, minor=False)
227 ax.set_xticks(echellemineure, minor=True)
228
229
230 #### Aspect du graphique
231
232 debug("On commende la déco du graphique", liste_err)
233
234 # La grille
235 ax.grid(conf["grille"]=="oui")
236 ax.grid(conf["grille"] == "oui", which="minor", linestyle="--")
237
238
195 plt.xlabel("Âge en "+unite,color=conf["couleurs"]["cadretxt"]) 239 plt.xlabel("Âge en "+unite,color=conf["couleurs"]["cadretxt"])
196 plt.ylabel(typedonnee.capitalize()+" en "+CONFIG["unites_typedonnees"][typedonnee],color=conf["couleurs"]["cadretxt"]) 240 plt.ylabel(typedonnee.capitalize()+" en "+CONFIG["unites_typedonnees"][typedonnee],color=conf["couleurs"]["cadretxt"])
197 #print("bla") 241 #print("bla")
@@ -207,7 +251,7 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err):
207 if conf['legende']=="oui": 251 if conf['legende']=="oui":
208 legende = plt.legend(loc=conf['positionlegende']) 252 legende = plt.legend(loc=conf['positionlegende'])
209 plt.setp(legende.get_texts(), color=conf["couleurs"]["cadretxt"]) 253 plt.setp(legende.get_texts(), color=conf["couleurs"]["cadretxt"])
210 plt.grid(conf["grille"]=="oui") 254
211 255
212 fig.tight_layout() 256 fig.tight_layout()
213 257
@@ -216,6 +260,9 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err):
216 260
217 261
218 262
263
264### Pour extrapoler la courbe
265
219def prolongecourbe(tableauOMS, date, donnee, nouvdates, typecourbe, liste_err): 266def prolongecourbe(tableauOMS, date, donnee, nouvdates, typecourbe, liste_err):
220 """ tableauOMS est le ableau des données OMS. date et donnee sont la date (jours) 267 """ tableauOMS est le ableau des données OMS. date et donnee sont la date (jours)
221 et la dernière donnée d'où on extrapole. On veut les extrapolations à nouvdate 268 et la dernière donnée d'où on extrapole. On veut les extrapolations à nouvdate