]> git.immae.eu Git - perso/Denise/oms.git/commitdiff
amélioration de la grille, bêta
authorDenise sur Lya <sekhmet@lya>
Mon, 15 Feb 2021 15:54:33 +0000 (16:54 +0100)
committerDenise sur Lya <sekhmet@lya>
Mon, 15 Feb 2021 15:54:33 +0000 (16:54 +0100)
data/changelog_data.txt
gestion_donnees.py
gestion_unites.py
templates/index.html
trace_courbe.py

index 09a6da4171e7ade71714c39f00917839762ffad6..f59e7b7561c3d143398689c9e4391624305b540e 100644 (file)
@@ -1,3 +1,5 @@
+"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>"
+
 "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>"
 
 "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>"
 "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>"
 
 "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>"
index c378b5e653a043334dbbeeae658a7555902d8878..208be4af0c07df63f30e9bdc21aa47333a014f7d 100644 (file)
@@ -193,7 +193,7 @@ def gere_configuration(data,liste_err):
     """ prend en argument le dictionnaire de requête (configuration imparfaite), et
     construit le dictionnaire de configuration qui va bien.
     Vérifie que chaque entrée est cohérente évidemment."""
     """ prend en argument le dictionnaire de requête (configuration imparfaite), et
     construit le dictionnaire de configuration qui va bien.
     Vérifie que chaque entrée est cohérente évidemment."""
-    configuration = {}
+    configuration = {"non_sauve": {}}
     
     # Pour le nom, osef qu'il soit vide
     nom = data.get("nom","")
     
     # Pour le nom, osef qu'il soit vide
     nom = data.get("nom","")
@@ -292,15 +292,14 @@ def gere_configuration(data,liste_err):
 
     configuration["prolongercourbes"] = gere_checkbox(data.get("prolongercourbes",""))
 
 
     configuration["prolongercourbes"] = gere_checkbox(data.get("prolongercourbes",""))
 
+    configuration["non_sauve"]["grilleamelio"] = gere_checkbox(data.get("grilleamelio",""))
     
     configuration["couleurs"] = {}
     # gérer les couleurs
     for clecouleur in DEFAUT["couleurs"]:
         coul = rgb_vers_tuple(data.get("couleur_"+clecouleur,""),CONFIG["couleurs"][clecouleur],liste_err)
         configuration["couleurs"][clecouleur] = coul
     
     configuration["couleurs"] = {}
     # gérer les couleurs
     for clecouleur in DEFAUT["couleurs"]:
         coul = rgb_vers_tuple(data.get("couleur_"+clecouleur,""),CONFIG["couleurs"][clecouleur],liste_err)
         configuration["couleurs"][clecouleur] = coul
-    
-    # On y ajoute la partie "non sauvée" qui servira peut-être plus tard
-    configuration["non_sauve"] = {}
+
     
     return configuration   
  
     
     return configuration   
  
index 8fcb1ad752931f34eaf972361dae93211e6cfe80..b97d90b58ed6cfcfd44b77c8a854ab16d6a5d195 100644 (file)
@@ -7,7 +7,7 @@ from gestion_erreurs import *
 ##################### outils pour affichage et choix de l'unité
 
 def choix_unite(maxi):
 ##################### outils pour affichage et choix de l'unité
 
 def choix_unite(maxi):
-    """ en fonction de l'âge maxi, on choisit une unité pertinente : jours, mois, année"""
+    """ en fonction de l'âge maxi, on choisit une unité pertinente : jours, semaine, mois, année"""
     if maxi<40:
         return "jours"
     elif maxi <100:
     if maxi<40:
         return "jours"
     elif maxi <100:
@@ -17,6 +17,65 @@ def choix_unite(maxi):
     else:
         return "années"
     
     else:
         return "années"
     
+def choix_echelle_data(typedonnees, donneemax):
+    """ en fonction du type de données et du maxi (on suppose qu'on part à 0),
+    on choisit un intervalle raisonnable
+    On renvoie le couple des pas (majeur, mineur)
+    (0,0) en cas de problème avec le typedonnnes """
+
+    if typedonnees not in CONFIG["liste_typedonnees"]:
+        print("Type de données non valide : "+typedonnees)
+        return (0,0)
+
+    if typedonnees == "poids":
+        if donneemax>15:
+            return (5,1)
+        elif donneemax > 10:
+            return (2,1)
+        else:
+            return (1,0.2)
+    if typedonnees == "taille":
+        if donneemax>100:
+            return (10,2)
+        else:
+            return (5,1)
+        
+def choix_echelle_temps(unite, tempsmaxi):
+    """ en fonction de l'unité voulue et du temps maximal (donné dans l'unité),
+    on choisit un intervalle raisonnable entre les pas.
+    On renvoie le couple des pas (majeur, mineur).
+    (0,0) en cas de problème avec l'unité
+    On met 0 en 2e arg si pas de grille secondaire"""
+    if unite not in CONFIG["liste_unites"]:
+        print("Unité non valide ! "+unite)
+        return (0,0)
+    
+    if unite=="jours":
+        if tempsmaxi > 60:  # pourquoi mettre en jours ?
+            return (30,1)
+        elif tempsmaxi >20:
+            return (7,1)
+        else:
+            return (1,0)
+    if unite=="semaines":
+        if tempsmaxi >50:
+            return (5,1)
+        elif tempsmaxi > 15:
+            return (2,1)
+        else:
+            return (1,1/7) # On met en jours
+    
+    if unite=="mois":
+        if tempsmaxi > 30:
+            return (2,1)
+        elif tempsmaxi > 10:
+            return (1,0)
+        else:
+            return (1,0.25) # on met en semaines
+        
+    if unite=="années":
+        return (1,1/12) # années / mois
+    
 def convertitunite(jours,unite,liste_err):
     """ convertit des jours à l'unité voulue
     renvoie des float"""
 def convertitunite(jours,unite,liste_err):
     """ convertit des jours à l'unité voulue
     renvoie des float"""
index 959c6a17082865667281722ad6fed206498100de..e5d4d24833ffc390d0bbfb2fc14b689445c57305 100644 (file)
@@ -96,6 +96,7 @@
        <li>Prolonger les courbes (expérimental) : <input type="checkbox" name="prolongercourbes" {% if valform.prolongercourbes == "oui" %} checked{% endif%}></li>
        
        <li><label>Même échelle sur tous les graphiques&nbsp;: </label><input type="checkbox" name="memechelle" {% if valform.memechelle == 'oui' %} checked{% endif %}></li>
        <li>Prolonger les courbes (expérimental) : <input type="checkbox" name="prolongercourbes" {% if valform.prolongercourbes == "oui" %} checked{% endif%}></li>
        
        <li><label>Même échelle sur tous les graphiques&nbsp;: </label><input type="checkbox" name="memechelle" {% if valform.memechelle == 'oui' %} checked{% endif %}></li>
+       <li><label>Grille améliorée (bêta)&nbsp;:</label><input type="checkbox" name="grilleamelio"></li>
        <li>Dimensions du graphique&nbsp;: <label>largeur&nbsp;: </label><input type="text" name="largeur" value="{{ valform.largeur }}"> 
        <label>hauteur&nbsp;: </label><input type="text" name="hauteur" value="{{ valform.hauteur }}"></li>
        <li><label>Légende&nbsp;: <input type="checkbox" name="legende" {% if valform.legende == 'oui' %} checked{% endif %}> </label>
        <li>Dimensions du graphique&nbsp;: <label>largeur&nbsp;: </label><input type="text" name="largeur" value="{{ valform.largeur }}"> 
        <label>hauteur&nbsp;: </label><input type="text" name="hauteur" value="{{ valform.hauteur }}"></li>
        <li><label>Légende&nbsp;: <input type="checkbox" name="legende" {% if valform.legende == 'oui' %} checked{% endif %}> </label>
index fab64718c0f7508795f13fea2854b268e5b3d19e..9cb4845c658c63191caaf39e49546f7ff63704fd 100644 (file)
@@ -4,6 +4,7 @@ from configuration import CONFIG
 from gestionOMS import *
 from gestion_unites import *
 from gestion_donnees import calcule_max_graphique, convertit_jours_vers_python
 from gestionOMS import *
 from gestion_unites import *
 from gestion_donnees import calcule_max_graphique, convertit_jours_vers_python
+from numpy import arange
 
 import matplotlib.pyplot as plt
 
 
 import matplotlib.pyplot as plt
 
@@ -139,10 +140,11 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err):
     plt.rcParams['ytick.color'] = conf["couleurs"]["cadretxt"]
     plt.rcParams['grid.color'] = conf["couleurs"]["grille"]
     plt.rcParams['legend.edgecolor'] = conf["couleurs"]["grille"]
     plt.rcParams['ytick.color'] = conf["couleurs"]["cadretxt"]
     plt.rcParams['grid.color'] = conf["couleurs"]["grille"]
     plt.rcParams['legend.edgecolor'] = conf["couleurs"]["grille"]
+    ax = plt.axes() 
 
     #Tracé des courbes OMS
     for (i,label,couleur) in liste_data_labels:
 
     #Tracé des courbes OMS
     for (i,label,couleur) in liste_data_labels:
-        plt.plot(coljour,extraire_colonne(t,i,jour_maxi),label=label,color=couleur)
+        ax.plot(coljour,extraire_colonne(t,i,jour_maxi),label=label,color=couleur)
         #warning("colonne"+str(i)+str(label)+str(couleur),liste_err)
 
     debug("cree_figure : tracé des courbes OMS ok",liste_err) 
         #warning("colonne"+str(i)+str(label)+str(couleur),liste_err)
 
     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):
     poids_min = max(0,poids_min-1)
     #max : +5% 
     poids_max = poids_max * 1.05
     poids_min = max(0,poids_min-1)
     #max : +5% 
     poids_max = poids_max * 1.05
-        
+       
     
     debug("cree_figure : prête à tracer la courbe de l'enfant",liste_err)
 
     ### Tracé pour de bon    
     if l_jours != []:
     
     debug("cree_figure : prête à tracer la courbe de l'enfant",liste_err)
 
     ### Tracé pour de bon    
     if l_jours != []:
-        plt.plot(l_jours_conv,l_poids,label=conf["nom"],color=conf["couleurs"]["cadretxt"],marker='o')
+        ax.plot(l_jours_conv,l_poids,label=conf["nom"],color=conf["couleurs"]["cadretxt"],marker='o')
         debug("Tracé de la courbe enfant, avec les jours "+str(l_jours_conv),liste_err)
         
         #### extrapolatios éventuelles
         debug("Tracé de la courbe enfant, avec les jours "+str(l_jours_conv),liste_err)
         
         #### extrapolatios éventuelles
@@ -192,6 +194,48 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err):
     else:
         debug("On ne trace pas de courbe enfant", liste_err)
 
     else:
         debug("On ne trace pas de courbe enfant", liste_err)
 
+    debug("Début de la gestion de l'échelle", liste_err)
+    ### échelle à régler
+    
+    if conf["non_sauve"]["grilleamelio"] == "oui":
+    
+        pas=choix_echelle_data(typedonnee, poids_max)
+        # data_min_arrondie
+        minechelle = int(poids_min/pas[0])*pas[0]
+    
+        debug("pas choisis pour l'échelle en y : "+str(pas), liste_err)    
+        echellemajeure = arange(minechelle, poids_max, pas[0])
+        
+        if pas[1] >0:
+            echellemineure = arange(minechelle, poids_max, pas[1])
+        else:
+            echellemineure = []
+        
+        ax.set_yticks(echellemajeure, minor=False)
+        ax.set_yticks(echellemineure, minor=True)
+    
+        # échelle en temps
+        pas=choix_echelle_temps(unite, age_maxi)
+        debug("pas choisis pour l'échelle en x : "+str(pas), liste_err)    
+    
+        echellemajeure = arange(0,age_maxi, pas[0])
+        if pas[1] >0:
+            echellemineure = arange(0,age_maxi, pas[1])
+        else:
+            echellemineure = []
+        ax.set_xticks(echellemajeure, minor=False)
+        ax.set_xticks(echellemineure, minor=True)    
+
+
+    #### Aspect du graphique
+
+    debug("On commende la déco du graphique", liste_err)
+
+    # La grille
+    ax.grid(conf["grille"]=="oui")
+    ax.grid(conf["grille"] == "oui", which="minor", linestyle="--")
+
+
     plt.xlabel("Âge en "+unite,color=conf["couleurs"]["cadretxt"])
     plt.ylabel(typedonnee.capitalize()+" en "+CONFIG["unites_typedonnees"][typedonnee],color=conf["couleurs"]["cadretxt"])
     #print("bla")
     plt.xlabel("Âge en "+unite,color=conf["couleurs"]["cadretxt"])
     plt.ylabel(typedonnee.capitalize()+" en "+CONFIG["unites_typedonnees"][typedonnee],color=conf["couleurs"]["cadretxt"])
     #print("bla")
@@ -207,7 +251,7 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err):
     if conf['legende']=="oui":
         legende = plt.legend(loc=conf['positionlegende'])
         plt.setp(legende.get_texts(), color=conf["couleurs"]["cadretxt"])
     if conf['legende']=="oui":
         legende = plt.legend(loc=conf['positionlegende'])
         plt.setp(legende.get_texts(), color=conf["couleurs"]["cadretxt"])
-    plt.grid(conf["grille"]=="oui")
+
 
     fig.tight_layout()
     
 
     fig.tight_layout()
     
@@ -216,6 +260,9 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err):
 
 
 
 
 
 
+
+### Pour extrapoler la courbe
+
 def prolongecourbe(tableauOMS, date, donnee, nouvdates, typecourbe, liste_err):
     """ tableauOMS est le ableau des données OMS. date et donnee sont la date (jours)
     et la dernière donnée d'où on extrapole. On veut les extrapolations à nouvdate 
 def prolongecourbe(tableauOMS, date, donnee, nouvdates, typecourbe, liste_err):
     """ tableauOMS est le ableau des données OMS. date et donnee sont la date (jours)
     et la dernière donnée d'où on extrapole. On veut les extrapolations à nouvdate