X-Git-Url: https://git.immae.eu/?p=perso%2FDenise%2Foms.git;a=blobdiff_plain;f=trace_courbe.py;h=28ee5b4c29b99ca523e900223f9dff7d0448a653;hp=e72560782e47f9268694400bcab791cadcd0c40e;hb=3d7da80ac11bb87ab441fb51f93b738be02de2c3;hpb=857e655d3b2963fed1a7c1a8c56169bf1c0a4809 diff --git a/trace_courbe.py b/trace_courbe.py index e725607..28ee5b4 100644 --- a/trace_courbe.py +++ b/trace_courbe.py @@ -5,8 +5,10 @@ import gestionOMS as oms import gestion_unites as u from gestion_donnees import calcule_max_graphique, convertit_jours_vers_python, convertit_age_vers_texte from gestion_erreurs import debug, erreur, warning +from calculs_extrapole import calcule_donnee_extrapolee, calcule_age_extrapole, interpole_lineaire, interpole_lineaire_ordonnee, formate_resultat_donnee, formate_resultat_age, formate_interpole, formate_extrapole + from numpy import arange -from calculs_extrapole import calcule_donnee_extrapolee, calcule_age_extrapole + import matplotlib.pyplot as plt @@ -167,6 +169,7 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_extracalculs, liste_err): jextrapole = jextrapole or conf["non_sauve"][calextra+"_type"] == typedonnee #print(jextrapole) + ############################## Là où on extrapole ################################ if jextrapole: try: debug("Il faut extrapoler les courbes !", liste_err) @@ -181,6 +184,7 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_extracalculs, liste_err): debug("On extrapole sur les jours : "+str(sources_extrap), liste_err) + # On récupère toutes les données extrapolées dates_extrapole, donnees_extrapole = prolongecourbe(t, sources_extrap, sources_extrap_data, conf["typecourbe"], liste_err) debug("données extrapolées !", liste_err) #debug(str(dates_extrapole[0:10])+str(donnees_extrapole[0:10]), liste_err) @@ -201,19 +205,50 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_extracalculs, liste_err): plt.plot(dates_extrapole_trace, donnees_extrapole_trace,color=conf["couleurs"]["cadretxt"], linestyle=(0, (5,7)), marker=None) debug("Tracé de la courbe extrapolée ok", liste_err) - # Calculer une donnée à l'âge x + ### Calculer une donnée à l'âge x if conf["non_sauve"]["calculextradata_type"] == typedonnee: - r = calcule_donnee_extrapolee(dates_extrapole, donnees_extrapole, conf["non_sauve"]["calculextradata_age"], typedonnee, liste_err) - if r!="": - liste_extracalculs.append(r) + # On essaie l'interpolation + r = interpole_lineaire(l_jours,l_poids,conf["non_sauve"]["calculextradata_age"], liste_err) + if r==-1: + # ça sera donc une extrapolation + r = calcule_donnee_extrapolee(dates_extrapole, donnees_extrapole, conf["non_sauve"]["calculextradata_age"], liste_err) + message=formate_extrapole(conf["non_sauve"]["nbextradata"]) +# if == 0: +# message+="l'ensemble des données" +# else: +# message+="les "+str(conf["non_sauve"]["nbextradata"])+" dernière"+met_s(conf["non_sauve"]["nbextradata"])+" données" + else: + message=formate_interpole() + + texte = formate_resultat_donnee(conf["non_sauve"]["calculextradata_age"], r, typedonnee, message, liste_err) + debug("calcul de la donnée extrapolée : "+texte, liste_err) + if texte!="": + liste_extracalculs.append(texte) print(liste_extracalculs) + # Ajouter le trait ? + if conf["non_sauve"]["calculextradata_trace"] == "oui": + dessine_guides(conf["non_sauve"]["calculextradata_age"], r, conf["couleurs"]["cadretxt"], unite, ax, liste_err) - # Calculer un âge où on atteint cette donnée + ### Calculer un âge où on atteint cette donnée if conf["non_sauve"]["calculextratemps_type"] == typedonnee: - r = calcule_age_extrapole(dates_extrapole, donnees_extrapole, conf["non_sauve"]["calculextratemps_val"], typedonnee, liste_err) - if r!="": - liste_extracalculs.append(r) + # interpolation + r = interpole_lineaire_ordonnee(l_jours,l_poids,conf["non_sauve"]["calculextratemps_val"], liste_err) + if r==-1: + # ça sera donc une extrapolation + r = calcule_age_extrapole(dates_extrapole, donnees_extrapole, conf["non_sauve"]["calculextratemps_val"], liste_err) + message=formate_extrapole(conf["non_sauve"]["nbextradata"]) + else: + message=formate_interpole() + + texte = formate_resultat_age(r, conf["non_sauve"]["calculextratemps_val"], typedonnee, message, liste_err) + + #r = calcule_age_extrapole(dates_extrapole, donnees_extrapole, conf["non_sauve"]["calculextratemps_val"], typedonnee, liste_err) + if texte!="": + liste_extracalculs.append(texte) print(liste_extracalculs) + # Ajouter le trait ? + if conf["non_sauve"]["calculextratemps_trace"]: + dessine_guides(r, conf["non_sauve"]["calculextratemps_val"], conf["couleurs"]["cadretxt"], unite, ax, liste_err) except: warning("Des problèmes pour extrapoler...", liste_err) @@ -371,4 +406,14 @@ def prolongecourbe(tableauOMS, dates, donnees, typecourbe, liste_err): ligne2 = tableauOMS[int(j)] nouvdonnees.append(coeff_moyen*ligne2[imin]+ (1-coeff_moyen)*ligne2[imax]) - return nouvdates,nouvdonnees \ No newline at end of file + return nouvdates,nouvdonnees + + +def dessine_guides(t, data, couleur, unite, ax, liste_err): + """ dessine deux lignes, horizontales et verticales qui vont "vers" la courbe + jusqu'aux points (t, data). En pointillés et avec un point dessus.""" + debug("Début de dessine_guides"+str(t)+", "+str(data), liste_err) + t_conv = u.convertitunite(t,unite,liste_err) + ax.vlines(t_conv, 0, data, colors=couleur, linestyles="dashed") + ax.hlines(data, 0, t_conv, color=couleur, linestyles="dashed") + ax.plot([t_conv], [data], color=couleur, marker="*", ms=13)