Bonjour,

J'ai, semble-t-il, un "couac" avec un cmap. Et j'ai pas trouvé comment l'éviter.
voici le pb:
J'utilise ce code pour faire un plot d'un petit dataframe (nommé 'data', lui même issu d'une lecture d'un fichier excel)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
 
x = data['ID']
y = data['% peaks']
timeStab = data['time-stab'] # il n'y a que 4 classes [1, 30, 60, 170] dans les 11 lignes de cette colonne
colors = ListedColormap(['black', 'red', 'blue', 'purple']) # je prépare donc 4 couleurs
 
scatter = plt.scatter(x, y, c=timeStab, cmap=colors, s=100)
plt.xticks(rotation=90)
plt.grid(True)
plt.legend(*scatter.legend_elements()) # la seule façon que j'ai trouvé d'afficher le bloc légende avec les couleurs du cmap...
plt.show()
je m'attendais à avoir mes 4 couleurs selon les 4 classes (qui sont dans la colonne data['time-stab']).
Mais j'ai eu cet affichage avec une couleur manquante et deux classes avec la même couleur.
Nom : Capture.JPG
Affichages : 223
Taille : 22,9 Ko

Du coup j'ai utilisé une cmap prédéfinie et là ça passe..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
x = data['ID']
y = data['% peaks']
timeStab = data['time-stab'] # il n'y a que 4 classes [1, 30, 60, 170] dans les 11 lignes de cette colonne
scatter = plt.scatter(x, y, c=timeStab, cmap='tab20b', s=100) # utilisation d'un cmap prédéfinie
plt.xticks(rotation=90)
plt.grid(True)
plt.legend(*scatter.legend_elements()) # la seule façon que j'ai trouvé d'afficher le bloc légende.
plt.show()
donne:
Nom : Capture1.JPG
Affichages : 208
Taille : 23,7 Ko

D'où vient ce "couac" et existe-t-il un moyen de l'éviter?
Merci pour votre temps .
Jma