|
# Bienvenue sur le "Tutoriel collaboratif et évolutif PYTHON "
|
|
# Bienvenue sur le "Tutoriel collaboratif et évolutif PYTHON "
|
|
|
|
|
|
(:warning: site en évolution ! :construction: :construction_worker: :construction_site: chantier actuel = ajouts d'illustrations ; gestion des versions) _Pour améliorer la rédaction et alimenter cette ressource, toute contribution sera la bienvenue : remarque, info complémentaire, exemple de graphique (éventuellement à construire)..._
|
|
(:warning: site en évolution ! :construction: :construction_worker: :construction_site: chantier actuel = ajouts d'illustrations ; gestion des versions) _Pour améliorer la rédaction et alimenter cette ressource, toute contribution sera la bienvenue : remarque, info complémentaire, exemple de graphique (éventuellement à construire)..._
|
|
|
|
|
... | @@ -90,22 +90,173 @@ La numérotation est critiquable et sera sans doute revue; la logique était d'a |
... | @@ -90,22 +90,173 @@ La numérotation est critiquable et sera sans doute revue; la logique était d'a |
|
### Les ateliers
|
|
### Les ateliers
|
|
|
|
|
|
Les exemples suivants sont tirés de nos activités (chroniques de valeurs, champs de valeurs...).
|
|
Les exemples suivants sont tirés de nos activités (chroniques de valeurs, champs de valeurs...).
|
|
| Atelier | Exemple | Notions centrales & additionnelles |
|
|
|
|
|---------|---------|------------------------------------|
|
|
<table>
|
|
| B) Atelier 1 : Un premier graphique, avec un axe des x et un axe des y | ![AtelierB1_PremiereFigure](uploads/4814f2260d6243b457d1c05706167d44/AtelierB1_PremiereFigure.png) | _voir repl en ligne_ <https://replit.com/@CPoulard/> , "Plotting long time-series" |
|
|
<tr>
|
|
| [B1) Un premier graphe très simple](/christine.poulard/atelier-matplotlib/-/wikis/AtelierB1_Graphiques_simples) entrée en matière | ![Fig1_graphique_basique2](uploads/b8cbe463f1de72fce4a7825e44704559/Fig1_graphique_basique2.png) | syntaxe simple avec "plt" : plt.plot(), plt.xlabel(), plt(ylim), plt.title... ; arguments label, lw, marker='\*', color, ls, fontsize...) |
|
|
<th>Atelier</th>
|
|
| [B2) lire un fichier texte et extraire l'information (="parser")](/christine.poulard/atelier-matplotlib/-/wikis/Atelier1_2) | ![FigureB2_feuilledestyle](uploads/5315b3712be9191c3d5c28498618cdf3/FigureB2_feuilledestyle.PNG) | modules pathlib et datetime ; tkinter.askopenfilename() ; Path.is_file() ; with open(nom_fichier, 'r') as fichier ; fichier.readline() ; chaine.split(); dictionnaires dict(), clé et valeurs ; feuilles de style (via rc_params) |
|
|
<th>Exemple</th>
|
|
| [C) Atelier 2 : un graphique avec un 2e axe des y ; les objets d'une figure](/christine.poulard/atelier-matplotlib/-/wikis/AtelierC) : représenter des variables de nature différente. Problème : créer une 2e courbe avec un 2e axe des y ; partager un même axe des x sur deux vignettes différentes, obtenir une légende avec toutes les variables. | ![Figure_3_graphique_PTQ_subplots](uploads/31dcb119ac7b2e3521a9a7b831010756/Figure_3_graphique_PTQ_subplots.png) | Définitions "objet" de Figure et Axes ; ax2= ax1.twinx() pour créer une vignette partageant le même axe des x ; créer et organiser plusieurs vignettes selon une grille avec subplots, arguments nrows et ncols ; sharex=True pour jumeler des vignettes. Différence entre légende d'Axes et de Figure. Créer une légende de toutes pièces (voir illustration en tête de page). |
|
|
<th>Notions centrales & additionnelles</th>
|
|
| [D) Atelier 3 : pour changer, une carte ('heatmap') à partir d'une matrice, avec sa colormap](/christine.poulard/atelier-matplotlib/-/wikis/Atelier_D_carte) ; avec quelques imports/exports entre mpl et QGis | ![carte](uploads/3495d20090b9fa6f99526442c859cf9b/carte.png) | lecture et tracé des shapes (ici, sans geopandas) ; représentation d'une matrice avec imshow; notion de colormap ; customisation d'une colorbar discrète par une liste de couleurs ou par discrétisation d'une colormap continue ; page spéciale "zooms" |
|
|
</tr>
|
|
| [E) Atelier 4 : on revient au traitement de chroniques, dans le cas de longues séries](Atelier_E_longues_series) : amélioration de l'affichage des étiquettes de date sans pandas ; on pourra travailler avec le fichier de l'atelier 1 et/ou un fichier binaire | | problèmes spécifiques des longues séries (cette section sera étoffée si besoin exprimé) |
|
|
<tr>
|
|
| **NIVEAU AVANCE** | **interactions : événements et WIDGETS** | |
|
|
<td>B) Atelier 1 : Un premier graphique, avec un axe des x et un axe des y</td>
|
|
| [Atelier événement : notion d'événement, de callback ; mise à jour d'un graphique ](Atelier_clics): exemple d'un "clic sur un graphique" qui va donner des infos sur le point le plus proche | ![selection_point_mouseclick_2courbes](uploads/197d80a53567be4fb1ec3f375240f1ad/selection_point_mouseclick_2courbes.png) | événement, liaison événement fonction ; exemples de MouseEvent et PickEvent ; identification du point le plus proche par distances "en unités du graphiques" et "en unité écran" ; widget Textbox |
|
|
<td>
|
|
| [F) Atelier 5 : widgets et prétraitement de longues chroniques avant visualisation ](Atelier_F_pretraitement): adaptation de la résolution | ![PresentationVisuSerieDynamique](uploads/bfd9cfbd308afc6ff7455467f650ab64/PresentationVisuSerieDynamique.png) | pandas et rééchantillonnage, surcharge des outils de la barre d'outils |
|
|
|
|
| [G) Atelier 6 : les widgets de matplotlib : slider et checkbutton](Atelier_G_widgets) : plusieurs exemples de difficulté croissante mais plus simple que le F ; | ![AtelierG_widgetsEtBoutonsToolbar](uploads/9b805cf3cb4d2d384c7f07b7e19270f1/AtelierG_widgetsEtBoutonsToolbar.png) | widgets "moins bien que ceux de Tkinter mais pouvant rendre service, modification des objets de matpotlib, ajout d'outils à la barre d'outils |
|
|
![AtelierB1_PremiereFigure](uploads/4814f2260d6243b457d1c05706167d44/AtelierB1_PremiereFigure.png)
|
|
| **TODO LIST ?** | **selon besoins exprimés** | |
|
|
</td>
|
|
| utilisation de fillbetween pour calculs géométriques | tests réalisés dans ST2shape, dans la cadre du développement d'une alternative à l'interface Pamhyr en Python | |
|
|
<td>
|
|
| ggplots, grammar of graphics | ![seaborn](uploads/c563f1ad5b213f49932b80d747208d6b/seaborn.png) | petite initiation en cheminant avec le Mooc MachineLearning [premiers pas dans seaborn](focus%20seaborn) |
|
|
|
|
| animations (pas encore fait !) | ![sinus](uploads/6b255e402801141e260dd0b2c479a2eb/sinus.gif) | mpl permet de générer des animations (animate) mais ici on triche avec un exemple en Julia (avec @gif, tuto M. Herbst) |
|
|
_voir repl en ligne_ <https://replit.com/@CPoulard/> , "Plotting long time-series"
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
<tr>
|
|
|
|
<td>
|
|
|
|
|
|
|
|
[B1) Un premier graphe très simple](/christine.poulard/atelier-matplotlib/-/wikis/AtelierB1_Graphiques_simples) entrée en matière
|
|
|
|
</td>
|
|
|
|
<td>
|
|
|
|
|
|
|
|
![Fig1_graphique_basique2](uploads/b8cbe463f1de72fce4a7825e44704559/Fig1_graphique_basique2.png)
|
|
|
|
</td>
|
|
|
|
<td>syntaxe simple avec "plt" : plt.plot(), plt.xlabel(), plt(ylim), plt.title... ; arguments label, lw, marker='\*', color, ls, fontsize...)</td>
|
|
|
|
</tr>
|
|
|
|
<tr>
|
|
|
|
<td>
|
|
|
|
|
|
|
|
[B2) lire un fichier texte et extraire l'information (="parser")](/christine.poulard/atelier-matplotlib/-/wikis/Atelier1_2)
|
|
|
|
</td>
|
|
|
|
<td>
|
|
|
|
|
|
|
|
![FigureB2_feuilledestyle](uploads/5315b3712be9191c3d5c28498618cdf3/FigureB2_feuilledestyle.PNG)
|
|
|
|
</td>
|
|
|
|
<td>modules pathlib et datetime ; tkinter.askopenfilename() ; Path.is_file() ; with open(nom_fichier, 'r') as fichier ; fichier.readline() ; chaine.split(); dictionnaires dict(), clé et valeurs ; feuilles de style (via rc_params)</td>
|
|
|
|
</tr>
|
|
|
|
<tr>
|
|
|
|
<td>
|
|
|
|
|
|
|
|
[C) Atelier 2 : un graphique avec un 2e axe des y ; les objets d'une figure](/christine.poulard/atelier-matplotlib/-/wikis/AtelierC) : représenter des variables de nature différente. Problème : créer une 2e courbe avec un 2e axe des y ; partager un même axe des x sur deux vignettes différentes, obtenir une légende avec toutes les variables.
|
|
|
|
</td>
|
|
|
|
<td>
|
|
|
|
|
|
|
|
![Figure_3_graphique_PTQ_subplots](uploads/31dcb119ac7b2e3521a9a7b831010756/Figure_3_graphique_PTQ_subplots.png)
|
|
|
|
</td>
|
|
|
|
<td>Définitions "objet" de Figure et Axes ; ax2= ax1.twinx() pour créer une vignette partageant le même axe des x ; créer et organiser plusieurs vignettes selon une grille avec subplots, arguments nrows et ncols ; sharex=True pour jumeler des vignettes. Différence entre légende d'Axes et de Figure. Créer une légende de toutes pièces (voir illustration en tête de page).</td>
|
|
|
|
</tr>
|
|
|
|
<tr>
|
|
|
|
<td>
|
|
|
|
|
|
|
|
[D) Atelier 3 : pour changer, une carte ('heatmap') à partir d'une matrice, avec sa colormap](/christine.poulard/atelier-matplotlib/-/wikis/Atelier_D_carte) ; avec quelques imports/exports entre mpl et QGis
|
|
|
|
</td>
|
|
|
|
<td>
|
|
|
|
|
|
|
|
![carte](uploads/3495d20090b9fa6f99526442c859cf9b/carte.png)
|
|
|
|
</td>
|
|
|
|
<td>lecture et tracé des shapes (ici, sans geopandas) ; représentation d'une matrice avec imshow; notion de colormap ; customisation d'une colorbar discrète par une liste de couleurs ou par discrétisation d'une colormap continue ; page spéciale "zooms"</td>
|
|
|
|
</tr>
|
|
|
|
<tr>
|
|
|
|
<td>
|
|
|
|
|
|
|
|
[E) Atelier 4 : on revient au traitement de chroniques, dans le cas de longues séries](Atelier_E_longues_series) : amélioration de l'affichage des étiquettes de date sans pandas ; on pourra travailler avec le fichier de l'atelier 1 et/ou un fichier binaire
|
|
|
|
</td>
|
|
|
|
<td>
|
|
|
|
|
|
|
|
</td>
|
|
|
|
<td>problèmes spécifiques des longues séries (cette section sera étoffée si besoin exprimé)</td>
|
|
|
|
</tr>
|
|
|
|
<tr>
|
|
|
|
<td>
|
|
|
|
|
|
|
|
**NIVEAU AVANCE**
|
|
|
|
</td>
|
|
|
|
<td>
|
|
|
|
|
|
|
|
**interactions : événements et WIDGETS**
|
|
|
|
</td>
|
|
|
|
<td>
|
|
|
|
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
<tr>
|
|
|
|
<td>
|
|
|
|
|
|
|
|
[Atelier événement : notion d'événement, de callback ; mise à jour d'un graphique ](Atelier_clics): exemple d'un "clic sur un graphique" qui va donner des infos sur le point le plus proche
|
|
|
|
</td>
|
|
|
|
<td>
|
|
|
|
|
|
|
|
![selection_point_mouseclick_2courbes](uploads/197d80a53567be4fb1ec3f375240f1ad/selection_point_mouseclick_2courbes.png)
|
|
|
|
</td>
|
|
|
|
<td>événement, liaison événement fonction ; exemples de MouseEvent et PickEvent ; identification du point le plus proche par distances "en unités du graphiques" et "en unité écran" ; widget Textbox</td>
|
|
|
|
</tr>
|
|
|
|
<tr>
|
|
|
|
<td>
|
|
|
|
|
|
|
|
[F) Atelier 5 : widgets et prétraitement de longues chroniques avant visualisation ](Atelier_F_pretraitement): adaptation de la résolution
|
|
|
|
</td>
|
|
|
|
<td>
|
|
|
|
|
|
|
|
![PresentationVisuSerieDynamique](uploads/bfd9cfbd308afc6ff7455467f650ab64/PresentationVisuSerieDynamique.png)
|
|
|
|
</td>
|
|
|
|
<td>pandas et rééchantillonnage, surcharge des outils de la barre d'outils</td>
|
|
|
|
</tr>
|
|
|
|
<tr>
|
|
|
|
<td>
|
|
|
|
|
|
|
|
[G) Atelier 6 : les widgets de matplotlib : slider et checkbutton](Atelier_G_widgets) : plusieurs exemples de difficulté croissante mais plus simple que le F ;
|
|
|
|
</td>
|
|
|
|
<td>
|
|
|
|
|
|
|
|
![AtelierG_widgetsEtBoutonsToolbar](uploads/9b805cf3cb4d2d384c7f07b7e19270f1/AtelierG_widgetsEtBoutonsToolbar.png)
|
|
|
|
</td>
|
|
|
|
<td>widgets "moins bien que ceux de Tkinter mais pouvant rendre service, modification des objets de matpotlib, ajout d'outils à la barre d'outils</td>
|
|
|
|
</tr>
|
|
|
|
<tr>
|
|
|
|
<td>
|
|
|
|
|
|
|
|
**TODO LIST ?**
|
|
|
|
</td>
|
|
|
|
<td>
|
|
|
|
|
|
|
|
**selon besoins exprimés**
|
|
|
|
</td>
|
|
|
|
<td>
|
|
|
|
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
<tr>
|
|
|
|
<td>
|
|
|
|
|
|
|
|
utilisation d'objets créés par matplotlib pour calculs géométriques (ici, attributs aire et périmètre de polygones)
|
|
|
|
</td>
|
|
|
|
<td>
|
|
|
|
|
|
|
|
![Section95_Z311](uploads/abe6438f0e6e81a3cae3e7e0ed57c953/Section95_Z311.png)
|
|
|
|
</td>
|
|
|
|
<td>
|
|
|
|
|
|
|
|
code inclus dans ST2shape, pour test au service de l'interface Pamhyr en Python :
|
|
|
|
|
|
|
|
polygone_zone_en_eau = ax_st.fill_between(x_section, y1=z_eau, y2=z_section, where=z_eau>z_section, interpolate=True)
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
<tr>
|
|
|
|
<td>ggplots, grammar of graphics</td>
|
|
|
|
<td>
|
|
|
|
|
|
|
|
![seaborn](uploads/c563f1ad5b213f49932b80d747208d6b/seaborn.png)
|
|
|
|
</td>
|
|
|
|
<td>
|
|
|
|
|
|
|
|
petite initiation en cheminant avec le Mooc MachineLearning [premiers pas dans seaborn](focus%20seaborn)
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
<tr>
|
|
|
|
<td>animations (pas encore fait !)</td>
|
|
|
|
<td>
|
|
|
|
|
|
|
|
![sinus](uploads/6b255e402801141e260dd0b2c479a2eb/sinus.gif)
|
|
|
|
</td>
|
|
|
|
<td>mpl permet de générer des animations (animate) mais ici on triche avec un exemple en Julia (avec @gif, tuto M. Herbst)</td>
|
|
|
|
</tr>
|
|
|
|
</table>
|
|
|
|
|
|
### Points "théorie" spécifique matplotlib
|
|
### Points "théorie" spécifique matplotlib
|
|
|
|
|
... | | ... | |