... | ... | @@ -2,13 +2,31 @@ |
|
|
|
|
|
Cette session "G" a été ajoutée pour permettre de manipuler les **widgets de Matplotlib** sur un exemple plus simple que les étapes "E" et "F", en particulier sans avoir à lire un fichier ni utiliser pandas et ses rééchantillonnages (une difficulté à la fois...).
|
|
|
Les widgets sont des objets permettant d'interagir avec la figure, il faut pour cela les associer avec des fonctions qui, par exemple, recalculent des valeurs en fonction de nouveaux paramètres et retracent les courbes :
|
|
|
- :abc: textbox : espace de saisie d'un texte
|
|
|
- :arrow_backward: :arrow_forward: "Sliders" (un peu relookés dans la version 3.5 :new:)
|
|
|
- :ballot_box_with_check: cases à cocher : Checkbuttons
|
|
|
- :radio_button: choix d'une option : Radiobuttons
|
|
|
- :stop_button: boutons : Buttons.
|
|
|
|
|
|
On commence par un exemple simple avec Textbox, et pour la suite on va commenter des codes plus complets.
|
|
|
|
|
|
A noter : on peut aussi ajouter des outils :tools: à la barre d'outil de matplotlib, ou reconfigurer mes outils existants.
|
|
|
|
|
|
## Exemple simple : "textbox" et mise à jour d'une courbe
|
|
|
Dans cet exemple, on définit une figure avec deux vignettes : **ax** va accueillir le graphique tandis que **ax_tbox** , en dessous, va servir à placer la textbox.
|
|
|
La textbox a :
|
|
|
- une représentation graphique, que l'on place sur une des vignettes du graphique
|
|
|
- des possibilités d'interactions : l'utilisateur peut modifier le texte (clic + saisie au clavier) ou simplement survoler l'emplacement
|
|
|
- des événements associés (ici "on_change" et "on_submit", voir la doc)
|
|
|
|
|
|
On définit deux courbes fixes avec **plot**, une sinusoïde et un point isolé placé sur cette sinusoïde (cette 2e courbe est tout à fait optionnelle). Il ne serait pas nécessaire de les nommer, puisqu'on n'intervient plus dessus.
|
|
|
Ici, on a défini une couleur de fond et une couleur "en cas de survol" : quand on passe la souris, la couleur chance
|
|
|
L'événement "une valeur a été modifiée dans la textbox" est associé à une fonction, appelée update. Cette fonction va tout simplement lire la valeur dans la textbox (argument "val" de la fonction ), transformée en entier positif, et tirer au hasard autant de valeurs aléatoires entre un et 6, et placer les points (x, sin(x)) pour tous les points x de cette série.
|
|
|
|
|
|
|
|
|
|
|
|
## Widgets intégrés à des applications
|
|
|
|
|
|
On s'appuie pour les explications sur :
|
|
|
- Le code ProbaCruesMaxAn_SurNannees.py : utilisation du widget **"slider"** pour changer les paramètres d'une fonction très simple, recalculer les résultats et mettre à jour deux courbes. Ces courbes sont tracées avec **plot**, ce qui n'est pas la meilleure solution pour des calculs discrets : dans la version ProbaCruesMaxAn_SurNannees_stairs.py on utilise "step" en combinaison avec "fill_between" pour avoir un rendu en escalier. Mais une difficulté à la fois...[pour voir la version définitive](https://gitlab.irstea.fr/hydrotools_demosandprocessing/probability-of-having-k-floods-in-n-years)
|
|
|
- Chegodaiev.py combine plusieurs types de courbes (plot, vlines) et utilise deux **sliders** et une **checkbox** (widget CheckButtons) ; GenerateurCruesMaxAnnuelles.py s'appuie sur ce code qu'il développe pour faire passer un message plus complexe. Il manipule d'autres types de courbes (scatter, stem). On y teste aussi, en doublon des widget **boutons**, des **outils** ajoutés à la barre d'outils (portant du texte ou une icône). Enfin, une version plus aboutie, qui n'utilise plus de boutons mais seulement des outils barre d'outils de matplotlib, a été déposée dans un projet public, avec traduction en anglais (en cours...) sous le nom Sample2Gumbel, qui lui-même sert de base à Sampo2Gumbel2Damages...
|
... | ... | |