Skip to content
GitLab
    • Explore Projects Groups Topics Snippets
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Register
  • Sign in
  • PYTHON - Atelier MatPlotLib PYTHON - Atelier MatPlotLib
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Terraform modules
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar

La forge institutionnelle d'INRAE étant en production depuis le 10 juin 2025, nous vous invitons à y créer vos nouveaux projets.

  • Poulard Christine
  • PYTHON - Atelier MatPlotLibPYTHON - Atelier MatPlotLib
  • Wiki
  • focus_scatter

focus_scatter · Changes

Page history
Update focus_scatter authored 3 years ago by Poulard Christine's avatar Poulard Christine
Hide whitespace changes
Inline Side-by-side
Showing
with 19 additions and 11 deletions
+19 -11
focus_scatter.md
View page @ bfaf7cfa
...@@ -60,13 +60,10 @@ plt.show() ...@@ -60,13 +60,10 @@ plt.show()
## 1. Faire varier les couleurs et les tailles ## 1. Faire varier les couleurs et les tailles
On va créer un code couleur de plusieurs façons ; on va en détailler 2 : On va créer un code couleur de plusieurs façons ; on va en détailler 2.
On en profite pour faire varier également la taille ; on définit le vecteur des tailles par une opération sur l'année (vous reconnaîtrez une _comprehension list_). Grâce à l'argument **year** on peut facilement récupérer le numéro d'année d'un vecteur de dates.
a) au plus simple, on désigne juste un vecteur dont les valeurs vont être traduites en couleurs selon une colormap : code ci-dessous. b) comme dans l'atelier B, on va définir par un dictionnaire une correspondance numéro de mois => couleur a) au plus simple, on désigne juste un vecteur dont les valeurs vont être traduites en couleurs selon une colormap choisie dans une liste ; ici on a opté pour "viridis".
On en profite pour faire varier également la taille ; on définit le vecteur des tailles par une opération sur l'année. Grâce à l'argument **year** on peut facilement récupérer le numéro d'année d'un vecteur de dates
Attention ; vous pouvez utiliser plt.legend() pour faire apparaître une légende (à condition d'avoir pensé à affecter un nom à l'argument label du scatter...). Vous verrez un symbole unique, donc avec l'une des couleurs et l'une des tailles possibles. Quand vous avez des couleurs variables, il faut donc soit afficher la colorbar si vous utiliser une colormap, soit trouver un moyen d'afficher un symbole par classe. La [doc fournit un tuto intéressant, mais qui ne donne pas forcément toutes les clés si on a beaucoup de catégories ou un lien indirect entre la valeur et la taille...](https://matplotlib.org/stable/gallery/lines_bars_and_markers/scatter_with_legend.html)
\*\* Code de l'exemple 1.a \*\* \*\* Code de l'exemple 1.a \*\*
...@@ -77,14 +74,20 @@ plt.scatter(dates, liste_mois, c=liste_mois, s=[4*(date.year - 1990) for date in ...@@ -77,14 +74,20 @@ plt.scatter(dates, liste_mois, c=liste_mois, s=[4*(date.year - 1990) for date in
plt.show() plt.show()
``` ```
### ajouter une colorbar continue : **Comment faire apparaître une légende ?**
En regardant la figure, on devine qu'il y a un code couleur, mais le graphique ne donne aucune indication sur une éventuelle correspondance valeur/couleur.
On peut imaginer que **plt.legend()** fera le boulot. Vous pouvez essayer, si possible en affectant un nom à l'argument **label** du scatter. Hélas, vous verrez un symbole unique, donc avec l'une des couleurs et l'une des tailles possibles.
Pour montrer l'échelle de couleur d'une **colormap**, il suffit d'appeler la **colorbar** correspondante, que l'on peut 'personnaliser' (customize pour les recherches anglophones).
### ajouter une colorbar continue à une courbe nommée
```python ```python
cax = plt.scatter(dates, liste_mois, c=liste_mois, s=[4 * (date.year - 1990) for date in dates], cmap='viridis') cax = plt.scatter(dates, liste_mois, c=liste_mois, s=[4 * (date.year - 1990) for date in dates], cmap='viridis')
plt.colorbar(cax) plt.colorbar(cax)
``` ```
<span dir="">#</span>##discrétiser la colorbar continue Ici, plutôt qu'une légende de couleurs continue, on voudrait marquer la correspondance valeur/classe. On va donc définir des limites de classe avec **bounds** et **norms** En première intention, on pensera sans doute à définir des limites commençant aux valeurs entières : \[1,2,3,...,12\] ; soit en Python range(1,13). Cependant, pour avoir une légende avec des classes centrées sur les valeurs entières, on propose de décaler les limites des classes d'un demi, en écrivant par exemple np.arange(0.5, 13, 1). On a choisi la colormap **rainbow**, vous pouvez en tester d'autres. ### ajouter une colorbar discrétisée à partir de la colorbar continue
Ici, on a certes utilisé une colorbar continue, mais on a des valeurs discrètes, et on préfère marquer la correspondance valeur/couleur. On va donc **discrétiser la colormap** en définissant des limites de classe avec **bounds** et **norms** En première intention, on pensera sans doute à définir des limites commençant aux valeurs entières : \[1,2,3,...,12\] ; soit en Python range(1,13). Cependant, pour avoir une légende avec des classes centrées sur les valeurs entières, on propose de décaler les limites des classes d'un demi, en écrivant par exemple np.arange(0.5, 13, 1). On a changé, cette fois on utilise la colormap **rainbow**, vous pouvez en tester d'autres.
En fait, ici c'est **BoundaryNorm** qui paraît faire tout le travail : En fait, ici c'est **BoundaryNorm** qui paraît faire tout le travail :
...@@ -105,8 +108,6 @@ plt.title("test 3 : cmap discrète à partir de 'rainbow'") ...@@ -105,8 +108,6 @@ plt.title("test 3 : cmap discrète à partir de 'rainbow'")
plt.show() plt.show()
``` ```
La [doc nous indique un moyen plus simple d'obtenir une légende quand il y a un nombre raisonnable de valeurs différentes](https://matplotlib.org/stable/gallery/lines_bars_and_markers/scatter_with_legend.html)
```python ```python
# méthode quand c est un vecteur de valeurs, et que scatter se débrouille pour utiliser une cmap par défaut # méthode quand c est un vecteur de valeurs, et que scatter se débrouille pour utiliser une cmap par défaut
points = plt.scatter(dates, liste_mois, c=liste_mois, cmap=cmap, norm=norm, s=[4 * (date.year - 1990) for date in dates], edgecolor='none') points = plt.scatter(dates, liste_mois, c=liste_mois, cmap=cmap, norm=norm, s=[4 * (date.year - 1990) for date in dates], edgecolor='none')
...@@ -186,4 +187,11 @@ ax_legende_coul_a_la_main.legend(handles=handles, ncol=6, fontsize=8, title_font ...@@ -186,4 +187,11 @@ ax_legende_coul_a_la_main.legend(handles=handles, ncol=6, fontsize=8, title_font
labelspacing=1.5) labelspacing=1.5)
``` ```
## updater une courbe de type scatter (set_data, set_facecolors...) ## updater une courbe de type scatter (set_data, set_facecolors...)
\ No newline at end of file
### autres méthodes
La [doc nous indique un moyen plus simple d'obtenir une légende quand il y a un nombre raisonnable de valeurs différentes](https://matplotlib.org/stable/gallery/lines_bars_and_markers/scatter_with_legend.html)
Il existe d'autres moyens d'afficher un symbole par classe sous forme d'une légende classique. La [doc fournit un tuto intéressant, mais qui ne donne pas forcément toutes les clés si on a beaucoup de catégories ou un lien indirect entre la valeur et la taille...](https://matplotlib.org/stable/gallery/lines_bars_and_markers/scatter_with_legend.html)
\ No newline at end of file
Clone repository
  • AtelierB1_Graphiques_simples
  • AtelierB2_Lire_un_fichier
  • AtelierC
  • Atelier_D_carte
  • Atelier_D_carte_a_partir_de_fichiers_binaires
  • Atelier_E_longues_series
  • Atelier_G_widgets
  • Atelier_clic_afficher
  • Atelier_clics
  • Cartes focus sur le redimensionnement
  • GUI avec QT
  • La doc avec Sphinx
  • Lexique
  • Point Théorie Subplots
  • Pour les contributeurs
View All Pages

Menu

Explore Projects Groups Topics Snippets