... | ... | @@ -3,6 +3,7 @@ |
|
|
## focus sur la méthode **SCATTER**
|
|
|
|
|
|
Objectif : connaître la méthode **scatter** et en particulier :
|
|
|
|
|
|
- les différentes manières d'utiliser les codes couleur (une couleur, liste de couleurs fixées par l'utilisateur, code couleur selon une colormap...)
|
|
|
- idem avec les tailles : taille fixe, taille selon liste ou taille selon une colonne
|
|
|
- les méthodes pour updater une courbe de type scatter (set_data, set_facecolors...)
|
... | ... | @@ -13,17 +14,55 @@ Objectif : connaître la méthode **scatter** et en particulier : |
|
|
Comme d'habitude, la référence la plus complète et la plus fiable car régulièrement mise à jour est [la doc officielle](https://matplotlib.org/devdocs/api/_as_gen/matplotlib.axes.Axes.scatter.html?highlight=scatter#matplotlib.axes.Axes.scatter)
|
|
|
|
|
|
Le tableau ci-dessous est proposé pour mettre en évidence quelques différences. On remarquera que les arguments de **scatter** sont souvent au pluriel : color**s**, size**s** car ils peuvent être des vecteurs.
|
|
|
|
|
|
| méthode | plot (pour comparaison) | scatter |
|
|
|
| ------ | ------ | ------ |
|
|
|
| ligne| oui par défaut, sauf si on précise ls='None'| non (attention, linewidths est relatif au contour des markers|
|
|
|
| markers| non par défaut, il faut préciser marker="o" (ou [tout autre symbole valide](https://matplotlib.org/devdocs/api/markers_api.html#module-matplotlib.markers))| cercle par défaut ; accès à la même liste des markers|
|
|
|
| couleur des markers| une seule couleur, exemple markercolor = 'red' | une seule couleur, c='red' ou une liste de couleurs c=vecteur_couleurs ou un code couleur (cmap) et une colonne de valeurs de référence |
|
|
|
| couleur intérieure des markers| une seule couleur, exemple markerfacecolor = 'red' (alias mfc)| une seule couleur, c='red' ou une liste de couleurs c=vecteur_couleurs ou un code couleur et une colonne de valeurs de référence |
|
|
|
| couleur contour des markers| une seule couleur, exemple markeredgecolor = 'red' (alias mec)| défaut = la même couleur que l'intérieur (='face') ; on peut préciser une couleur ou une liste de couleurs ou 'none' (default: 'face') |
|
|
|
| taille | une valeur, exemple markersize = 20| une taille ou une liste de tailles, exemple sizes=liste_tailles 'none' (default: 'face') |
|
|
|
| update des coordonnées des points| facile : set_data, set_xdata, set_ydata| facile : set_offset |
|
|
|
| update des couleurs des points| facile : set_color| facile : set_edgecolors, set_facecolors |
|
|
|
|---------|-------------------------|---------|
|
|
|
| ligne | oui par défaut, sauf si on précise ls='None' | non (attention, linewidths est relatif au contour des markers |
|
|
|
| markers | non par défaut, il faut préciser marker="o" (ou [tout autre symbole valide](https://matplotlib.org/devdocs/api/markers_api.html#module-matplotlib.markers)) | cercle par défaut ; accès à la même liste des markers |
|
|
|
| couleur des markers | une seule couleur, exemple markercolor = 'red' | une seule couleur, c='red' ou une liste de couleurs c=vecteur_couleurs ou un code couleur (cmap) et une colonne de valeurs de référence |
|
|
|
| couleur intérieure des markers | une seule couleur, exemple markerfacecolor = 'red' (alias mfc) | une seule couleur, c='red' ou une liste de couleurs c=vecteur_couleurs ou un code couleur et une colonne de valeurs de référence |
|
|
|
| couleur contour des markers | une seule couleur, exemple markeredgecolor = 'red' (alias mec) | défaut = la même couleur que l'intérieur (='face') ; on peut préciser une couleur ou une liste de couleurs ou 'none' (default: 'face') |
|
|
|
| taille | une valeur, exemple markersize = 20 | une taille ou une liste de tailles, exemple sizes=liste_tailles 'none' (default: 'face') |
|
|
|
| update des coordonnées des points | facile : set_data, set_xdata, set_ydata | facile : set_offset |
|
|
|
| update des couleurs des points | facile : set_color | facile : set_edgecolors, set_facecolors |
|
|
|
|
|
|
### 1. Le plus simple : scatter avec une seule couleur et une seule taille
|
|
|
|
|
|
Vous pouvez tester le petit code ci-dessous : la méthode plot trace des lignes grises, la méthode scatter place des points bleus. N'hésitez pas à modifier les arguments pour comprendre. On trace ici le numéro du mois en fonction de la date, cela n'a pas grand intérêt mais permet de bien comprendre comment fonctionnent les arguments de couleur et de taille.
|
|
|
|
|
|
```python
|
|
|
import matplotlib.pyplot as plt
|
|
|
import numpy as np
|
|
|
from datetime import datetime, timedelta
|
|
|
|
|
|
|
|
|
date_ini = datetime(2000,1,1)
|
|
|
dates = []
|
|
|
liste_mois = []
|
|
|
for annee in range(2000,2022):
|
|
|
for mois in range(1,13):
|
|
|
dates.append(datetime(annee, mois,1))
|
|
|
liste_mois.append(mois)
|
|
|
|
|
|
plt.plot(dates, liste_mois)
|
|
|
plt.scatter(dates, liste_mois, c='blue', s=20)
|
|
|
plt.show()
|
|
|
```
|
|
|
|
|
|
![scatter_1](uploads/283a2242bf835e48b439c84056d2a5f4/scatter_1.png)
|
|
|
|
|
|
### 2. Faire varier les couleurs et les tailles
|
|
|
|
|
|
On va créer un code couleur de plusieurs façons ; on va en détailler 2 :
|
|
|
|
|
|
* comme dans l'atelier B, on va définir par un dictionnaire une correspondance numéro de mois => couleur
|
|
|
* plus simple, on désigne juste un vecteur dont les valeurs vont être traduites en couleurs selon une colormap : code ci-dessous.
|
|
|
* 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.
|
|
|
*
|
|
|
|
|
|
```
|
|
|
plt.plot(dates, liste_mois, c='grey')
|
|
|
plt.scatter(dates, liste_mois, c=liste_mois, s=[2*(date.year - 1980) for date in dates], cmap='viridis')
|
|
|
plt.show()
|
|
|
```
|
|
|
|
|
|
![scatter_2](uploads/b0c5991ee71174bb184dfdaa66bc94f5/scatter_2.png) |
|
|
\ No newline at end of file |