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
Show whitespace changes
Inline Side-by-side
Showing
with 25 additions and 5 deletions
+25 -5
focus_scatter.md
View page @ 0d8d35a9
...@@ -77,13 +77,34 @@ cax = plt.scatter(dates, liste_mois, c=liste_mois, s=[4 * (date.year - 1990) for ...@@ -77,13 +77,34 @@ cax = plt.scatter(dates, liste_mois, c=liste_mois, s=[4 * (date.year - 1990) for
plt.colorbar(cax) plt.colorbar(cax)
``` ```
\###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.
En fait, ici c'est **BoundaryNorm** qui paraît faire tout le travail :
- on ne discrétise pas la colormap directement, on ne sait même pas combien elle a de classes : on utilisera juste l'argument cmap.N dont BoundaryNorm a besoin
- la liste des limites de classes, notée habituellement **bounds** est ici simplement passée comme argument à BoundaryNorm, et ce sont ces limites qui vont déterminer le nombre de classes ; on peut passer par une variable intermédiaire pour être plus lisible
- BoundaryNorm renvoie une "norme" qu'il faut ensuite passer comme argument à scatter, avec la colormap
```python
from matplotlib import colors
cmap = plt.cm.rainbow
# norm = colors.BoundaryNorm(np.arange(1, 13, 1), cmap.N) # testez pour comparer
norm = colors.BoundaryNorm(np.arange(0.5, 13, 1), cmap.N) # ici les classes sont centrées sur les valeurs entières
plt.scatter(dates, liste_mois, c=liste_mois, cmap=cmap, norm=norm, s=[4 * (date.year - 1990) for date in dates], edgecolor='none')
plt.colorbar(ticks=range(1,13))
plt.title("test 3 : cmap discrète à partir de 'rainbow'")
plt.show()
```
### ajouter une colorbar discrète définie par un dictionnaire ### ajouter une colorbar discrète définie par un dictionnaire
On suppose ici que l'on va choisir a priori une correspondance entre valeurs et couleurs. Attention, ce n'est pas forcément une "bonne pratique" pour représenter des valeurs continues, mais cela peut se défendre si on a des catégories qui peuvent être liées à des couleurs. Ici on décide que l'hiver c'est gris, le printemps vert, l'été orange et l'automne bleu. Ca reste subjectif. On va donc d'abord créer un dictionnaire, en fait on reprend celui de l'atelier C, puis on transforme les valeurs en liste de couleurs. Ensuite, il faudra préciser dans la variable "bounds" que les "fourchettes" de valeurs sont centrées sur les entiers. En fait, le problème des limites est toujours de savoir laquelle est "incluse" et laquelle est "exclue". Avec des entiers, on peut se permettre de définir les limites entre les valeurs entières pour lever les ambiguités. Mais vous pouvez jouer avec les valeurs pour voir... On suppose ici que l'on va choisir a priori une correspondance entre valeurs et couleurs. Attention, ce n'est pas forcément une "bonne pratique" pour représenter des valeurs continues, mais cela peut se défendre si on a des catégories qui peuvent être liées à des couleurs. Ici on décide que l'hiver c'est gris, le printemps vert, l'été orange et l'automne bleu. Ca reste subjectif. On va donc d'abord créer un dictionnaire, en fait on reprend celui de l'atelier C, puis on transforme les valeurs en liste de couleurs. Ensuite, il faudra préciser dans la variable "bounds" que les "fourchettes" de valeurs sont centrées sur les entiers. En fait, le problème des limites est toujours de savoir laquelle est "incluse" et laquelle est "exclue". Avec des entiers, on peut se permettre de définir les limites entre les valeurs entières pour lever les ambiguités. Mais vous pouvez jouer avec les valeurs pour voir...
| Colormap continue discrétisée | ListedColorMap : colormap discrète définie par une liste | | Colormap continue discrétisée | ListedColorMap : colormap discrète définie par une liste |
|--------|----------------------------------------------------------| |-------------------------------|----------------------------------------------------------|
| cell | ![test_scatter_4](uploads/cf3e97051da614bed3e2e4b93f88062d/test_scatter_4.png)| | ![test_scatter_3](uploads/26181233c98a12ef4a8b0b955d238c17/test_scatter_3.png) | ![test_scatter_4](uploads/cf3e97051da614bed3e2e4b93f88062d/test_scatter_4.png) |
| cell | on a en plus customisé la colorbar pour comprendre| | on a défini les limites de classes avec BoundaryNorm | on a en plus customisé la colorbar pour comprendre |
```python ```python
DICO_COULEURS_MOIS = {1: "dimgrey", 2: "black", 3: "palegreen", 4: 'mediumspringgreen', 5: 'forestgreen', 6: 'gold', 7: 'orange', 8:'orangered', 9:'deepskyblue', 10:'royalblue', 11:'navy', 12:'silver'} DICO_COULEURS_MOIS = {1: "dimgrey", 2: "black", 3: "palegreen", 4: 'mediumspringgreen', 5: 'forestgreen', 6: 'gold', 7: 'orange', 8:'orangered', 9:'deepskyblue', 10:'royalblue', 11:'navy', 12:'silver'}
...@@ -105,4 +126,3 @@ for mois in range(1,13): ...@@ -105,4 +126,3 @@ for mois in range(1,13):
plt.title("test 4") plt.title("test 4")
plt.show() plt.show()
``` ```
\ 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