IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Calcul scientifique Python Discussion :

pandas-matplotlib - cmap couleur non affichée [Python 3.X]


Sujet :

Calcul scientifique Python

  1. #1
    Membre actif
    Homme Profil pro
    Amateur débutant
    Inscrit en
    Décembre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Amateur débutant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 88
    Par défaut 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 : 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 : 203
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 : 187
Taille : 23,7 Ko

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

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur Système
    Inscrit en
    Novembre 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur Système

    Informations forums :
    Inscription : Novembre 2019
    Messages : 19
    Par défaut
    Bonsoir,

    Pour pouvoir utiliser une cmap "discrète", il faut fixer des bornes et normaliser.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    import matplotlib.colors as colors
     
    [...]
     
    # j'ai renommé ta cmap (colors est importé de matplotlib)
    customCmap = ListedColormap(['black', 'red', 'blue', 'purple']) # je prépare donc 4 couleurs
     
    # Bornes pour chaque couleur 
    # Il faut encadrer tes valeurs  [1, 30, 90, 170]
    bounds = np.array([0, 10, 40, 80, 200])
    # Normalisation à partir des bornes
    norm = colors.BoundaryNorm(boundaries=bounds, ncolors=4)
     
    scatter = plt.scatter(x, y, c=timeStab, cmap=customCmap , s=100, norm=norm)
     
    [...]

  3. #3
    Membre actif
    Homme Profil pro
    Amateur débutant
    Inscrit en
    Décembre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Amateur débutant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 88
    Par défaut Merci
    Impeccable merci beaucoup!

    Note: pour mon cas j'ai utilisé, comme bounds, le np.array([0, 1, 30, 90, 170, 200])

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DoubleBuffering][JMenu] menu non afficher
    Par estacado dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 10/01/2006, 08h09
  2. Couleur non prise en compte en exécution
    Par BECHE dans le forum Langage
    Réponses: 2
    Dernier message: 22/12/2005, 18h14
  3. [Quick Report] Valeur d'un champ existante mais non affichée
    Par navis84 dans le forum Bases de données
    Réponses: 1
    Dernier message: 31/03/2005, 09h15
  4. [CR 9] Mise en forme non affichée when null
    Par Yorglaa dans le forum Formules
    Réponses: 2
    Dernier message: 28/06/2004, 17h27
  5. Couleurs non standart (donc pas clX)
    Par Shabata dans le forum Langage
    Réponses: 8
    Dernier message: 20/06/2003, 07h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo