|
|
## C) Atelier 2 : un graphique avec 3 variables d'unités différentes : 2e axe des y, subplots ; les objets d'une figure
|
|
|
|
|
|
**Objectif :** représenter sur une même figure des variables de nature différente mais tracées selon un même axe des x, avec une légende contenant toutes les variables **Notions principales** : Figure, Axes, subplots, sharex, twinx, ax.legend et fig.legend **Notions accessoires** : types de courbe plot, vlines, step (plus de détails [page focus step](focus_step)), scatter (plus de détails [page focus scatter](focus_scatter)) ; dictionnaires ; créer une légende totalement customisée
|
|
|
:construction_worker: attention, sans doute à cause des modifications répétées d'éditeur ("en test" !), le code reporté ici a... disparu.
|
|
|
Il reste le fichier python complet, en attendant de réparer le problème.
|
|
|
|
|
|
**Objectif :** représenter sur une même figure des variables de nature différente mais tracées selon un même axe des x, avec une légende contenant toutes les variables.
|
|
|
|
|
|
**Notions principales** : Figure, Axes, subplots, sharex, twinx, ax.legend et fig.legend **Notions accessoires** : types de courbe plot, vlines, step (plus de détails [page focus step](focus_step)), scatter (plus de détails [page focus scatter](focus_scatter)) ; dictionnaires ; créer une légende totalement customisée
|
|
|
|
|
|
**Notion secondaire** : on parlera un peu de la structure de **DataFrame du module pandas** et des solutions pour créer des graphiques spécifiques, mais ce thème sera approfondi dans une autre page. Il y a du nouveau sur Python et les pd.DataFrame avec la version 3.5.
|
|
|
|
|
|
Cet objectif ne semble pas hyper ambitieux, et vous trouverez des tutos pour réaliser facilement cette figure, et pourtant la syntaxe peut sembler étrange... et les légendes sont capricieuses... Un peu de théorie est indispensable pour comprendre la notion de \*subplots" et d' "Axes", liés ou non, et la construction d'une légende. La démarche proposée est en plusieurs étapes, pour manipuler les notions importantes progressivement. Le code fourni crée finalement la figure ci-dessous, composée de 3 "vignettes" dont deux portent une ou deux courbes. Elle n'est pas parfaite, vous pourrez vous exercer à l'améliorer. On remarque une légende commune aux deux vignettes en bas et une légende des couleurs des mois construites "à la main" au milieu.
|
|
|
|
... | ... | @@ -52,6 +59,19 @@ L'outil zoom montre que l'affichage des étiquettes de date est correct quel que |
|
|
|
|
|
Par défaut, les trois variables sont toutes les 3 tracées dans le même repère, bien qu'elles aient des unités différentes. Cela permet déjà de voir les données rapidement. Pour un vrai graphique mis en forme, il faut [utiliser des méthodes spécifiques à pandas](https://stackoverflow.com/questions/68955060/how-to-plot-a-pandas-dataframe-with-multiple-axes-each-rendering-multiple-column). Pour ne pas compliquer les choses avec les syntaxes spécifique pandas, on va dans la suite travailler avec les méthodes standard de matplotlib, en passant en arguments x et y les dates et les valeurs séparément.
|
|
|
|
|
|
|
|
|
:three: .:five: **seaborn** connaît le type pandas.DataFrame et offre donc des syntaxes adaptées aux données contenues dans les DataFrame. La version matplotlib 3.5 a repris cette bonne idée :
|
|
|
|
|
|
```python
|
|
|
df = pandas.DataFrame({"var1":[1,2,3,4,5,6], "var2":[1,2,3,4,5,6]})
|
|
|
|
|
|
# syntaxe "classique", il faut extraire les colonnes et les passer en argument
|
|
|
plt.plot(df["var1"], df["var2"])
|
|
|
|
|
|
# syntaxe adaptée à la classe DataFrame : on donne les noms de colonne et le nom de la DataFrame
|
|
|
plt.plot("var1", "var2", data=df)
|
|
|
```
|
|
|
|
|
|
### C3) Mise en forme des données (sans pandas) : une figure avec deux vignettes, dont une avec deux axes des y.
|
|
|
|
|
|
Vous pouvez partir de la fonction précédente ou de **donnees_TD_ETP_2subplots** déjà écrit; dans le développement on trouve souvent en ligne des bouts de code qu'il faut s'approprier et adapter. Cette fonction reprend le début de la fonction précédente (lecture avec pd.read_csv), on trace aussi avec la méthode pd plot pour vérifier que la lecture s'est bien passée (phase que l'on peut ensuite mettre en commentaire). Ensuite on a du code spécifique. Si vous l'exécutez, vous verrez que ça marche, le rendu n'est pas forcément à votre goût, donc ce sera l'occasion de vous exercer à mettre en forme. On proposera par la suite une variante, vous pourrez donc étoffer votre palette.
|
... | ... | |