|
## C) Atelier 2 : un graphique avec 3 variables d'unités différentes : 2e axe des y, subplots ; les objets d'une figure
|
|
## C) Atelier 2 : un graphique avec 3 variables d'unités différentes : 2e axe des y, subplots ; les objets d'une figure
|
|
|
|
|
|
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... Nous allons passer par un peu de théorie pour comprendre ce qui se passe et afficher une légende correcte.
|
|
**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
|
|
Pour arriver à la figure ci-dessous, qui permet de manipuler des notions importantes, on va passer par plusieurs étapes. Elle n'est pas parfaite, vous pourrez vous exercer à l'améliorer.
|
|
**Notions principales** : Figure, Axes, subplots, sharex, twinx, ax.legend et fig.legend
|
|
|
|
**Notions accessoires** : types de courbe plot, vlines, step, scatter ; dictionnaires ; créer une légende totalement customisée
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
<img src="uploads/f26fc46a5c4bc9f072820291a73d1cbd/Figure_3_graphique_PTQ_subplots_avec-legende.png" width="240" >
|
|
<img src="uploads/f26fc46a5c4bc9f072820291a73d1cbd/Figure_3_graphique_PTQ_subplots_avec-legende.png" width="240" >
|
|
<i> figure composée de deux sous-figures liées par un unique axe des x ; la vignette du haut a deux axes des y. On remarque une légende commune aux deux vignettes en bas et une légende des couleurs des mois construites "à la main" au milieu (la figure est en fait composée de 3 "vignettes")</i>
|
|
|
|
|
|
<i> figure composée de deux sous-figures liées par un unique axe des x ; la vignette du haut a deux axes des y. Au milieu, une légende des couleurs des mois ; en bas, une légende commune aux deux vignettes </i>
|
|
|
|
|
|
|
|
|
|
Les diapos introduisant l'Atelier ont déjà abordé ce cas, en expliquant ce qui se "cache derrière" un plt.plot, et le pourquoi de la syntaxe plus explicite **" fig, ax = plt.subplots() "**, On y explique aussi ce qu'est vraiment le type de "ax", qui n'est pas que un axe mais se caractérise par une surface dans la figure munie d'un système d'axes... Les diapos de cette partie reviennent sur ce point théorique de manière plus détaillée.
|
|
Les diapos introduisant l'Atelier ont déjà abordé ce cas, en expliquant ce qui se "cache derrière" un plt.plot, et le pourquoi de la syntaxe plus explicite **" fig, ax = plt.subplots() "**, On y explique aussi ce qu'est vraiment le type de "ax", qui n'est pas que un axe mais se caractérise par une surface dans la figure munie d'un système d'axes... Les diapos de cette partie reviennent sur ce point théorique de manière plus détaillée.
|
... | @@ -139,8 +146,10 @@ ax_q.legend() |
... | @@ -139,8 +146,10 @@ ax_q.legend() |
|
```
|
|
```
|
|
|
|
|
|
### C5) Variantes "esthétiques" et tests d'autres types de courbes (step, scatter...)
|
|
### C5) Variantes "esthétiques" et tests d'autres types de courbes (step, scatter...)
|
|
|
|
**Code pour obtenir la figure du haut de page**
|
|
|
|
|
|
La figure tracée par la fonction **donnees_TD_ETP_2subplots** souffre de défauts esthétiques (couleurs qui se voient mal...) et de plus elle représente par des lignes des variables qui sont en fait des moyennes à pas de temps fixe. On va donc utiliser la méthode **step** sur laquelle j'attire votre attention car j'ai eu du mal à la trouver ! A priori, la méthode **bar** convient aussi, et on la trouve plus facilement ; la doc prévient cependant que cette méthode convient à des valeurs par catégories, et toutes les étiquettes sont tracées ! On peut s'en sortir en imposant les étiquettes (mais en perdant alors l'ajustement automatique au zoom). Pire, si l'on trace plusieurs courbes qui ne partage pas exactement les mêmes étiquettes de dates (par exemple, la série originale puis la même mais rééchantillonnée au mois), on constate alors que les points sont tracés en fonction du rang et pas du tout de la date ! Tant qu'on y est, on va aussi utilise **scatter** à titre d'exercice, même si ce n'est pas vraiment pertinent ici. Scatter permet de passer comme argument color et size soit une valeur unique soit in vecteur de même taille de x et y. Ici, il n'y a pas matière à faire varier la taille (sauf pour s'exercer), on propose de jouer sur la couleur. On en profite au passage pour manipuler un dictionnaire qui vous propose une relation entre les entiers de 1 à 12 et des couleurs.
|
|
La figure tracée par la fonction **donnees_TD_ETP_2subplots** souffre de défauts esthétiques (couleurs qui se voient mal...) et de plus elle représente par des lignes des variables qui sont en fait des moyennes à pas de temps fixe. On va donc utiliser la méthode **step** sur laquelle j'attire votre attention car j'ai eu du mal à la trouver (*) !
|
|
|
|
Pour étoffer l'arsenal des courbes, on va aussi utiliser **scatter** à titre d'exercice, même si ce n'est pas vraiment pertinent ici. Scatter permet de passer comme argument color et size soit une valeur unique soit in vecteur de même taille de x et y. Ici, il n'y a pas matière à faire varier la taille (sauf pour s'exercer), on propose de jouer sur la couleur. On en profite au passage pour manipuler un dictionnaire qui vous propose une relation entre les entiers de 1 à 12 et des couleurs.
|
|
|
|
|
|
```python
|
|
```python
|
|
DICO_COULEURS_MOIS = {1: "dimgrey", 2: "black", 3: "palegreen", 4: 'mediumspringgreen', 5: 'forestgreen', 6: 'gold', 7: 'orange',
|
|
DICO_COULEURS_MOIS = {1: "dimgrey", 2: "black", 3: "palegreen", 4: 'mediumspringgreen', 5: 'forestgreen', 6: 'gold', 7: 'orange',
|
... | @@ -167,4 +176,6 @@ ax_t.scatter(DF_PTQ.index, DF_PTQ[etiquette_temperatures].tolist(), marker='*', |
... | @@ -167,4 +176,6 @@ ax_t.scatter(DF_PTQ.index, DF_PTQ[etiquette_temperatures].tolist(), marker='*', |
|
|
|
|
|
Si vous avez bien assimilé cette manip avec les dictionnaires, vous pourriez écrire une fonction adaptée au fichier dans sa forme initiale, avec des "janv-01" et autres "sept-02".
|
|
Si vous avez bien assimilé cette manip avec les dictionnaires, vous pourriez écrire une fonction adaptée au fichier dans sa forme initiale, avec des "janv-01" et autres "sept-02".
|
|
|
|
|
|
|
|
(*) A priori, la méthode **bar** semblait indiquée ; la doc prévient cependant que cette méthode convient à des valeurs par catégories, et toutes les étiquettes sont tracées ! On peut s'en sortir en imposant les étiquettes (mais en perdant alors l'ajustement automatique au zoom). Pire, si l'on trace plusieurs courbes qui ne partage pas exactement les mêmes étiquettes de dates (par exemple, la série originale puis la même mais rééchantillonnée au mois), on constate alors que les points sont tracés en fonction du rang et pas du tout de la date !
|
|
|
|
|
|
\[Retour à la page principale\] |
|
\[Retour à la page principale\] |
|
|
|
\ No newline at end of file |