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 :

Pylab : Diagramme circulaire avec Pie [Python 2.X]


Sujet :

Calcul scientifique Python

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 98
    Points : 59
    Points
    59
    Par défaut Pylab : Diagramme circulaire avec Pie
    Bonjour à tous,

    J'aimerais pouvoir afficher des statistiques concernant des sufaces de terrains et module pylab me parrait plutôt bien cependant j'ai plusieurs questions assez générales concernant l'utilisation de la méthode de pylab : pie().

    Le principe :
    a) Je récupère une liste de nom de surface. Le nombre de surface est variable
    surf =['s1',s2',...'sn'], la longueur de la liste est n
    b) Je récupère l'aire de ces surfaces
    air = [4,12e-5, 5,02e-2,... 3,52e-4], la longueur de la liste est n
    c) Je souhaite afficher un diagramme avec le nom de la surface, sont air en m" et le pourcentage qu'elle représente

    Mes questions sur pie():
    1)Comment créér une liste de couleurs àléatorie de longeur n ?
    2)Comment afficher l'air total en plus du nom de ma surface ?
    3)Comment faire ressortir du diagramme la surface ayant le plus grand pourcentage ?

    Ce que j'ai déjà testé :
    J'ai commencé par quelque chose de très simple, mais le résultat n'est pas concluant
    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
     
    from pylab import *
    import matplotlib.pyplot as plt
    from matplotlib import cm
     
    #Exemple Liste retourne lar le plugin
    surf = [[u'312', u'(rcl 3.5) 312 - Coniferous forest'], [u'231', u'(rcl 1.0) 231 - Pastures'], [u'324', u'(rcl 2.0) 324 - Transitional woodland-shrub'], [u'412', u'(rcl 1.5) 412 - Peat bogs']]
    surface=[]
    #Recuperation des nom des surface
    for i in range(len(surf)) :
        surface.append(surf[i][1])
    #Exemple Liste des airs recupere par le plugin
    area = [5.778573217306391e-06, 3.079483481707867e-05, 3.1286893007986946e-05, 4.127670277163082e-05]
    area2 =[]
    for i in area :
        area2.append(i*1000)
    #Exemple couleurs
    col = ['b', 'r', 'g','y']
     
    #Creation du diagramme et plot  utopct='%1.1f%%'
    plt.pie(area2, labels=surface, colors =col ,autopct='%1.1f%%',  startangle=90,shadow=False) #diagramme avec un quotient multiplicateur
    plt.pie(area, labels=surface, colors =col ,autopct='%1.1f%%',  startangle=90,shadow=False) # Diagramme original
    plt.axis('equal')
    show()
    Voici le plot :
    Nom : Capture.JPG
Affichages : 2305
Taille : 27,9 Ko

    J'ai donc deux diagramme qui devrait s'affciher mais aucun ne s'affiche comme je l'aurait souhaité
    5) Pourquoi n'ai-je pas un diagramme avec une comme des parts égale à 100% ?

    Mes questions sur l'affichage du diagramme :
    Je souhaite afficher le diagramme comme une image dans une fenêtre de dialogue PyQt. La fenêtre resemble à la boite de dialogue ci dessous. Je souhaite le placer le diagramme dans le cadre détails qui est juste pour le moment un espace vide.
    Nom : ui_res.JPG
Affichages : 2038
Taille : 31,9 Ko
    6) Comment faire pour le placer dans cette fenetre simplement ?


    Merci d'avance pour tous vos conseils .
    Aurélie

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    Salut,
    Bienvenue dans le monde de matplotlib.

    1)Comment créér une liste de couleurs àléatorie de longeur n ?
    Avec numpy par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> import numpy as np
    >>> col = ['b', 'r', 'g', 'y']
    >>> np.random.choice(col, 10)
    array(['r', 'y', 'b', 'y', 'y', 'b', 'y', 'b', 'b', 'r'], 
          dtype='<U1')
    >>>
    ou définir les couleurs à partir des codes RGB (matplotlib.colors)

    2)Comment afficher l'air total en plus du nom de ma surface ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        surf = [
            ['312', '(rcl 3.5) 312 - Coniferous forest'],
            ['231', '(rcl 1.0) 231 - Pastures'],
            ['324', '(rcl 2.0) 324 - Transitional woodland-shrub'],
            ['412', '(rcl 1.5) 412 - Peat bogs']
        ]
        _, surface = zip(*surf)         #Recuperation des nom des surface
        area = np.array([
            5.778573217306391e-06,
            3.079483481707867e-05,
            3.1286893007986946e-05,
            4.127670277163082e-05,
        ])
        surface = ["{:s}\n[{:8.4g}]".format(s, a) for s, a in zip(surface, area)]
    Puis d'utiliser surface comme labels. Ou alors avec l'attribut textprops introduit dans la version 1.4 (pas essayer).

    3)Comment faire ressortir du diagramme la surface ayant le plus grand pourcentage ?
    Avec l'attribut wedgeprops introduit dans mpl1.4 ?

    J'ai donc deux diagramme qui devrait s'affciher mais aucun ne s'affiche comme je l'aurait souhaité
    5) Pourquoi n'ai-je pas un diagramme avec une comme des parts égale à 100% ?
    Parce que sum(x) <= 1. Dans ce cas les valeurs sont tracées telles quelles. Il faut renormer. Facile avec les numpy.array :
    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
    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
     
    import numpy as np
    import matplotlib.pyplot as plt
     
    def main():
        #Exemple Liste retourne lar le plugin
        surf = [
            ['312', '(rcl 3.5) 312 - Coniferous forest'],
            ['231', '(rcl 1.0) 231 - Pastures'],
            ['324', '(rcl 2.0) 324 - Transitional woodland-shrub'],
            ['412', '(rcl 1.5) 412 - Peat bogs']
        ]
        _, surface = zip(*surf)         #Recuperation des nom des surface
        col = ['b', 'r', 'g', 'y']      #Exemple couleurs
     
        #Exemple Liste des airs recupere par le plugin
        area = np.array([
            5.778573217306391e-06,
            3.079483481707867e-05,
            3.1286893007986946e-05,
            4.127670277163082e-05,
        ])
        surface = ["{:s}\n[{:8.4g}]".format(s, a) for s, a in zip(surface, area)]
     
        #Creation du diagramme et plot  utopct='%1.1f%%'
        plt.pie(
            area / area.sum(),
            labels=surface,
            colors=col,
            autopct='%1.1f%%',
            startangle=90,
        )
     
        plt.axis('equal')
        plt.show()
     
    if __name__ == '__main__':
        main()
    Mes questions sur l'affichage du diagramme :
    Je souhaite afficher le diagramme comme une image dans une fenêtre de dialogue PyQt. La fenêtre resemble à la boite de dialogue ci dessous. Je souhaite le placer le diagramme dans le cadre détails qui est juste pour le moment un espace vide.

    6) Comment faire pour le placer dans cette fenetre simplement ?
    Je me souviens de ce poste. Le problème était proche du tien.
    Bonne continuation.

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 98
    Points : 59
    Points
    59
    Par défaut
    Bonjour __dardanos__,

    Merci pour beaucoup pour ton aide. Tes conseils étaient claire et j'ai donc pu résoudre pas mal de mes problèmes.

    j'obtiens un super pie chart avec toutes les infos dont j'avais besoins :
    Nom : ok.JPG
Affichages : 4748
Taille : 31,2 Ko

    Je n'ai pas réussie à utiliser wedgeprops, j'ai un message d'erreur me disant que ce n'ai pas une clé connue. Mais à la limite c'est pas très important. Je peux m'en passé ce n'est que du design !

    J'ai lu le poste que tu as joints mon problème reste entier. Mais je vais chercher encore un peu cela ne fait que 2 jours que je connais l'existance du module matplotlib, j'ai donc encore énormemment à voir !
    J'ouvrirais surement une nouvelle discusion plus spécifique si je ne trouve pas car c'est plus de l'ordre du GUI / pyQT.

    Merci encore et bonne continuation !

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

Discussions similaires

  1. Etablir des diagrammes graphiques avec l'API JUNG
    Par zizoux5 dans le forum Multimédia
    Réponses: 2
    Dernier message: 15/03/2007, 17h36
  2. problème avec pied de page [Tuto de developpez.com]
    Par developpeur_mehdi dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 15/01/2007, 17h26
  3. Réponses: 9
    Dernier message: 14/01/2007, 18h09
  4. Pb avec pied de groupe et de page
    Par Lucie-Celibec dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 01/12/2006, 13h15
  5. Réponses: 5
    Dernier message: 22/11/2006, 16h57

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