Skip to content
GitLab
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 Oct 26, 2021 by Poulard Christine's avatar Poulard Christine
Show whitespace changes
Inline Side-by-side
focus_scatter.md
View page @ 9c434277
...@@ -9,8 +9,7 @@ Objectif : connaître la méthode **scatter** et en particulier : ...@@ -9,8 +9,7 @@ Objectif : connaître la méthode **scatter** et en particulier :
- les méthodes pour updater une courbe de type scatter (set_data, set_facecolors...) - les méthodes pour updater une courbe de type scatter (set_data, set_facecolors...)
- pistes pour créer une légende détaillée (faisant figurer le code couleur et/ou la taille des symboles) - pistes pour créer une légende détaillée (faisant figurer le code couleur et/ou la taille des symboles)
Objectif secondaire : point sur les *colormaps* et sur les *colorbars* Objectif secondaire : point sur les _colormaps_ et sur les _colorbars_ [voir ce tuto de la doc pour customiser une colormap](https://matplotlib.org/stable/tutorials/colors/colorbar_only.html)
[voir ce tuto de la doc pour customiser une colormap](https://matplotlib.org/stable/tutorials/colors/colorbar_only.html)
### Présentation et comparaison avec la méthode plot ### Présentation et comparaison avec la méthode plot
...@@ -58,25 +57,53 @@ plt.show() ...@@ -58,25 +57,53 @@ plt.show()
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 :
a) au plus simple, on désigne juste un vecteur dont les valeurs vont être traduites en couleurs selon une colormap : code ci-dessous. 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
b) comme dans l'atelier B, on va définir par un dictionnaire une correspondance numéro de mois => couleur
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 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
** Code de l'exemple 2.a ** \*\* Code de l'exemple 2.a \*\*
```python ```python
plt.plot(dates, liste_mois, c='grey') plt.plot(dates, liste_mois, c='grey')
plt.scatter(dates, liste_mois, c=liste_mois, s=[4*(date.year - 1990) for date in dates], cmap='viridis') plt.scatter(dates, liste_mois, c=liste_mois, s=[4*(date.year - 1990) for date in dates], cmap='viridis')
plt.show() plt.show()
``` ```
... et pour ajouter une colorbar continue ;
### ajouter une colorbar continue :
```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)
```python ```
### 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...
| header | ListedColorMap : colormap discrète définie par une liste |
|--------|----------------------------------------------------------|
| cell | cell |
| cell | cell |
```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', 8:'orangered', 9:'deepskyblue', 10:'royalblue', 11:'navy', 12:'silver'}
8:'orangered', 9:'deepskyblue', 10:'royalblue', 11:'navy', 12:'silver'}
# on place les valeurs du dictionnaire dans une liste de couleurs
cmap = colors.ListedColormap(list(DICO_COULEURS_MOIS.values()))
# on définit les limites de classe ; ici pour être sûr du résultat on place les limites entre les entiers et en plus ça permettra de bien tracer l'échelle ;
# avec np.arange on crée un vecteur de 0.5 inclus à 13 exclu par pas de 1:
bounds =np.arange(0.5,13,1)
norm = colors.BoundaryNorm(bounds, cmap.N) # cmap.N = nb de couleurs de cmap
plt.scatter(dates, liste_mois, c=liste_mois, cmap=cmap, norm=norm, s=[4 * (date.year - 1990) for date in dates], edgecolor='none')
# on place les ticks de 1 à 12 (13 exclus) ; les limites de classe sont issues de bounds
cbar = plt.colorbar(ticks=range(1,13), label="code couleur des mois")
# facultatif : autre moyen d'écrire une légende customisée, en définissant la localisation du texte (= les 5 premières lettres de la couleur)
for mois in range(1,13):
cbar.ax.text(1.5, mois, f"{DICO_COULEURS_MOIS[mois][0:5]}", ha='center', va='center')
plt.title("test 4")
plt.show()
``` ```
![test_scatter_4](uploads/cf3e97051da614bed3e2e4b93f88062d/test_scatter_4.png)
\ 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