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 :

[Debutant] Matplotlib - Colors/pie


Sujet :

Calcul scientifique Python

  1. #1
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 342
    Points : 107
    Points
    107
    Par défaut [Debutant] Matplotlib - Colors/pie
    Salut,

    J ai un petit probleme. Je souhaite tracer plusieurs pie charts avec pour tous la meme couleur pour le meme element. Je m explique:

    Par exemple dans le code suivant, je trace 2 graphes. Mon probleme est que l element Frogs est bien bleu dans les deux graphes car c'est le premier element de mes series, mais Dogs qui est une foi 3ieme une foi second n a pas la meme couleur ...

    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
    18
    19
    20
    21
    22
    from pylab import *
     
    labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
    fracs = [15,30,45, 10]
    #colors= ('b', 'g', 'r', 'c')
     
    explode=(0, 0.05, 0, 0)
    subplot(211)
    pie(fracs, explode=None, labels=labels,
    colors=None,
    autopct='%1.1f%%', shadow=True)
    title('Raining Hogs and Dogs', bbox={'facecolor':'0.8', 'pad':5})
     
    labels = 'Frogs', 'Dogs'
    fracs = [60,40]
    subplot(212)
    pie(fracs, explode=None, labels=labels,
    colors=None,
    autopct='%1.1f%%', shadow=True)
    title('Raining Hogs and Dogs', bbox={'facecolor':'0.8', 'pad':5})
     
    show()
    resultat :



    Je ne voudrais eviter d avoir a definir la sequence des couleurs manuellement pour chacun de mes graphes, mais definir en amont une sorte de legende du style :
    Quand dans les grpahes c dogs utiliser bleu, quand c Frogs, utiliser vert ...

    Est ce possible ?

    Merci

    Slumpy

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Non, ce n'est pas possible.

  3. #3
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut
    C'est un peu dommage ce genre de limitations...

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Les labels sont indépendants des valeurs stockées, donc ce n'est pas vraiment une limitation. Faire en sorte qu'un système marche, c'est pas immédiat du tout, et l'utilité est somme toute réduite à ceux qui ne veulent pas écrire une ligne supplémentaire (my_colors = [colors[label] for label in labels]).

  5. #5
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 342
    Points : 107
    Points
    107
    Par défaut
    Salut,

    Matthieu, je suis pas sur de comprendre ca :
    (my_colors = [colors[label] for label in labels]).
    Tu pourrais expliquer stp ?


    Voila ce que j ai fait ... Ce n est vraiment pas terrible, mais au moins ca me permet d avoir la meme couleur pour un meme label sur chacun de mes graphes.

    En gros, je repertorie des le depart tous les labels dont j aurai besoin et je les met dans un dictionnaire en leur attribuant une couleur.

    Puis au moment d appeler mon graphe, je reconstruie la sequence de mes couleurs utilisant ce dictionnaire.

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    class aWRZ(object):
        def __init__(self):
            self.dico_LexD={}
     
        def addLexD(self, NewLexD,NewPerc):
            self.dico_LexD[NewLexD]=NewPerc
     
     
     
     
    def PlotPie(aData,aLabel,acolor, aTitle):
        # make a square figure and axes
        fig=figure(1, figsize=(10,10))
        axes([0.2, 0.2, 0.5, 0.5])
     
        labels = aLabel
        fracs = aData
        colors= acolor
     
        #explode=(0, 0.0005, 0, 0)
        matplotlib.rcParams['font.size'] = 7
     
        pie(fracs, explode=None,labels=labels,
            colors=colors,
            autopct='%1.1f%%', shadow=True)
     
        title(aTitle, bbox={'facecolor':'0.8', 'pad':5})
        fig.savefig(aTitle + 'aquifer.png') #,dpi=100)
        close()
     
     
     
    import csv
    from pylab import *
    import numpy
    import random as  rn
     
    dico_WRZ={}
    dico_Legend={}
    cr = csv.reader(open("C:/Book1.csv","rb"))
    for a_CSV_row in cr:
        WC=a_CSV_row[0]
        WRZ=a_CSV_row[1]
        LexD=a_CSV_row[2]
        Perc=a_CSV_row[3]
        if dico_WRZ.has_key(WRZ)==False:
            dico_WRZ[WRZ]=aWRZ()
        dico_WRZ[WRZ].addLexD(LexD,Perc)
        #Colors
        if dico_Legend.has_key(LexD)==False:
            # create hex random color string 
            rcolor = '#' + "".join(["%02x"%rn.randrange(256) for x in range(3)])
            print rcolor
            dico_Legend[LexD]=rcolor 
     
    for WRZkey in dico_WRZ.keys():
        print
        print WRZkey
        Labels=()
        Data=()
        Colors=()
        Title=WRZkey
        for Lexkey in dico_WRZ[WRZkey].dico_LexD.keys():
            Labels += (Lexkey,)
            Data += (dico_WRZ[WRZkey].dico_LexD[Lexkey],)
            Colors += (dico_Legend[Lexkey],)
            print Lexkey, dico_WRZ[WRZkey].dico_LexD[Lexkey]
        PlotPie(Data,Labels,Colors,Title)
    Petite question:
    Est ce que quelqu un saurait comment utilisant cette facon de faire, je pourrais utiliser une plage de couleur plutot que tirer des couleurs au hasard ? (en clair, pouvoir utiliser la rampe 'hot' ou autre). Donc modifier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if dico_Legend.has_key(LexD)==False:
            # create hex random color string 
            rcolor = '#' + "".join(["%02x"%rn.randrange(256) for x in range(3)])
            print rcolor
            dico_Legend[LexD]=rcolor
    Merci

    Slumpy

  6. #6
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut
    Bonjour.

    Citation Envoyé par Slumpy Voir le message
    Est ce que quelqu un saurait comment utilisant cette facon de faire, je pourrais utiliser une plage de couleur plutot que tirer des couleurs au hasard ? (en clair, pouvoir utiliser la rampe 'hot' ou autre).
    Ce genre de choses se fait via une simple approximation affine. Par exemple, on part d'une couleur RGB (a,b,c) vers une autre (x,y,z). On définit alors la couleur intermédiaire de niveau t% par [f(a,x,t) , f(b,y,t) , f(c,z,t)]f est la fonction définie par f(a,x,t) = t/100*(x-a) + a.

  7. #7
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par Slumpy Voir le message
    Matthieu, je suis pas sur de comprendre ca : Tu pourrais expliquer stp ?
    Grosso modo, c'est comme pour ta classe, sauf que c'est plus réduit comme écriture.
    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
    18
     
    dico_WRZ={}
    dico_Legend={}
    cr = csv.reader(open("C:/Book1.csv","rb"))
    for a_CSV_row in cr:
        WC=a_CSV_row[0]
        WRZ=a_CSV_row[1]
        LexD=a_CSV_row[2]
        Perc=a_CSV_row[3]
        if dico_WRZ.has_key(WRZ)==False:
            dico_WRZ[WRZ]={}
        dico_WRZ[WRZ][LexD] = Perc
        #Colors
        if dico_Legend.has_key(LexD)==False:
            # create hex random color string 
            rcolor = '#' + "".join(["%02x"%rn.randrange(256) for x in range(3)])
            print rcolor
            dico_Legend[LexD]=rcolor
    Donc j'ai juste changé dico_WRZ[WRZ].

    Maintenant, ta grosse fonction for devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for WRZkey in dico_WRZ.keys():
        print
        print WRZkey
        Labels=()
        Data=()
        Colors=()
        Title=WRZkey
        Labels = dico_WRZ[WRZkey].keys()
        Data = dico_WRZ[WRZkey].values()
        Colors = [dico_Legend[Lexkey] for Lexkey in Labels ]
        PlotPie(Data,Labels,Colors,Title)

Discussions similaires

  1. [DEBUTANT] Color. majuscule ou minuscule?
    Par kayzra dans le forum Langage
    Réponses: 7
    Dernier message: 24/01/2007, 22h47
  2. [debutant] coloration syntaxique
    Par demostene dans le forum Eclipse Java
    Réponses: 7
    Dernier message: 30/06/2004, 15h16
  3. [CR] entête et pied sur page 1/B de matrice
    Par chloe.j3 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 04/09/2002, 12h07
  4. TObject->Color et composantes RGB
    Par Flo. dans le forum C++Builder
    Réponses: 10
    Dernier message: 14/06/2002, 17h07
  5. [Kylix] Memo color
    Par Metal3d dans le forum EDI
    Réponses: 1
    Dernier message: 21/05/2002, 17h12

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