... | ... | @@ -78,16 +78,21 @@ plt.show() |
|
|
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).
|
|
|
On va donner ici la procédure, très simple, et avancer vers des colorbars plus personnalisées, ici pour tenir compte de la nature discrète des valeurs.
|
|
|
On donnera ensuite d'autres méthodes pour tracer des **légendes plus classiques personnalisées**, en s'inspirant des tutos de la doc.
|
|
|
|
|
|
### ajouter une colorbar continue à une courbe nommée
|
|
|
### ajouter une colorbar continue
|
|
|
Il suffit d'associer une colorbar à notre courbe portant un code couleur ("mappable") en une instruction. On peut ajouter des arguments, comme par exemple un titre.
|
|
|
|
|
|
```python
|
|
|
# on va cette fois nommer l'objet retourné par la méthode scatter
|
|
|
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) # c'est cet objet qui est passé en argument à la méthode colorbar
|
|
|
```
|
|
|
|
|
|
### 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.
|
|
|
Ici, on a certes utilisé une colorbar continue, mais on a des valeurs discrètes, et on préfèrerait marquer la correspondance valeur discrète/couleur. On va donc **discrétiser la colormap** en définissant des limites de classe que l'on va transformer en objet **norm**, que l'on passera comme argument dans la méthode scatter (détail ci-dessous).
|
|
|
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 :
|
|
|
|
... | ... | |