2 pièce(s) jointe(s)
pandas-matplotlib - cmap couleur non affichée
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:
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.
Pièce jointe 625147
Du coup j'ai utilisé une cmap prédéfinie et là ça passe..
Code:
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:
Pièce jointe 625148
D'où vient ce "couac" et existe-t-il un moyen de l'éviter?
Merci pour votre temps .
Jma