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 :

problème d'histogramme matplotlib


Sujet :

Calcul scientifique Python

  1. #1
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut problème d'histogramme matplotlib
    Salut les pythons éxilés de la bibliothèque standart afin de découvrir de nouvelles contrées tous comme moi suivant un cuissant échec devant la volonté de créer un histogramme avec matplotlib.pyplot.
    Je crois que je n'ai pas bien saisis ce qu'est un histogramme:
    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
    import matplotlib.pyplot as plt
    from random import randint
    a=[]
    i=0
    while i < 256 :
      a.append(randint(0,256))
      i += 1
     
    plt.hist(a, bins=256, range=None, normed=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, hold=None)
    array([1, 1, 0, 1, 0, 0, 0, 1, 0, 2, 0, 4, 1, 1, 0, 2, 1, 0, 1, 1, 0, 1, 1,
           3, 1, 2, 0, 1, 0, 1, 1, 2, 1, 2, 1, 1, 2, 2, 3, 0, 2, 0, 0, 0, 1, 0,
           1, 0, 1, 1, 2, 0, 1, 1, 2, 2, 2, 0, 0, 1, 2, 0, 0, 1, 2, 1, 0, 1, 2,
           1, 1, 2, 0, 1, 2, 1, 2, 2, 0, 1, 0, 1, 0, 1, 2, 0, 1, 0, 1, 3, 1, 1,
           0, 1, 1, 1, 0, 2, 0, 1, 0, 2, 0, 0, 2, 1, 0, 0, 1, 2, 0, 3, 1, 1, 5,
           1, 0, 2, 1, 0, 1, 1, 1, 1, 3, 2, 0, 2, 1, 3, 2, 1, 2, 1, 2, 0, 1, 0,
           2, 0, 2, 1, 0, 3, 1, 1, 1, 2, 1, 0, 1, 0, 1, 0, 0, 0, 2, 0, 0, 2, 1,
           0, 1, 0, 1, 0, 2, 1, 1, 1, 0, 1, 0, 2, 0, 3, 1, 1, 0, 0, 1, 1, 3, 1,
           1, 0, 2, 2, 1, 1, 2, 0, 1, 1, 1, 1, 0, 1, 3, 3, 1, 3, 2, 2, 0, 0, 0,
           0, 2, 0, 1, 1, 0, 1, 2, 0, 2, 1, 2, 0, 0, 1, 0, 2, 1, 0, 1, 0, 1, 1,
           1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 1, 1, 0, 1, 1, 4, 0, 1, 0,
           1, 2, 3]), array([   0.        ,    0.98046875,    1.9609375 ,    2.94140625,
              3.921875  ,    4.90234375,    5.8828125 ,    6.86328125,
              7.84375   ,    8.82421875,    9.8046875 ,   10.78515625,
             11.765625  ,   12.74609375,   13.7265625 ,   14.70703125,
             15.6875    ,   16.66796875,   17.6484375 ,   18.62890625,
             19.609375  ,   20.58984375,   21.5703125 ,   22.55078125,
             23.53125   ,   24.51171875,   25.4921875 ,   26.47265625,
             27.453125  ,   28.43359375,   29.4140625 ,   30.39453125,
             31.375     ,   32.35546875,   33.3359375 ,   34.31640625,
             35.296875  ,   36.27734375,   37.2578125 ,   38.23828125,
             39.21875   ,   40.19921875,   41.1796875 ,   42.16015625,
             43.140625  ,   44.12109375,   45.1015625 ,   46.08203125,
             47.0625    ,   48.04296875,   49.0234375 ,   50.00390625,
             50.984375  ,   51.96484375,   52.9453125 ,   53.92578125,
             54.90625   ,   55.88671875,   56.8671875 ,   57.84765625,
             58.828125  ,   59.80859375,   60.7890625 ,   61.76953125,
             62.75      ,   63.73046875,   64.7109375 ,   65.69140625,
             66.671875  ,   67.65234375,   68.6328125 ,   69.61328125,
             70.59375   ,   71.57421875,   72.5546875 ,   73.53515625,
             74.515625  ,   75.49609375,   76.4765625 ,   77.45703125,
             78.4375    ,   79.41796875,   80.3984375 ,   81.37890625,
             82.359375  ,   83.33984375,   84.3203125 ,   85.30078125,
             86.28125   ,   87.26171875,   88.2421875 ,   89.22265625,
             90.203125  ,   91.18359375,   92.1640625 ,   93.14453125,
             94.125     ,   95.10546875,   96.0859375 ,   97.06640625,
             98.046875  ,   99.02734375,  100.0078125 ,  100.98828125,
            101.96875   ,  102.94921875,  103.9296875 ,  104.91015625,
            105.890625  ,  106.87109375,  107.8515625 ,  108.83203125,
            109.8125    ,  110.79296875,  111.7734375 ,  112.75390625,
            113.734375  ,  114.71484375,  115.6953125 ,  116.67578125,
            117.65625   ,  118.63671875,  119.6171875 ,  120.59765625,
            121.578125  ,  122.55859375,  123.5390625 ,  124.51953125,
            125.5       ,  126.48046875,  127.4609375 ,  128.44140625,
            129.421875  ,  130.40234375,  131.3828125 ,  132.36328125,
            133.34375   ,  134.32421875,  135.3046875 ,  136.28515625,
            137.265625  ,  138.24609375,  139.2265625 ,  140.20703125,
            141.1875    ,  142.16796875,  143.1484375 ,  144.12890625,
            145.109375  ,  146.08984375,  147.0703125 ,  148.05078125,
            149.03125   ,  150.01171875,  150.9921875 ,  151.97265625,
            152.953125  ,  153.93359375,  154.9140625 ,  155.89453125,
            156.875     ,  157.85546875,  158.8359375 ,  159.81640625,
            160.796875  ,  161.77734375,  162.7578125 ,  163.73828125,
            164.71875   ,  165.69921875,  166.6796875 ,  167.66015625,
            168.640625  ,  169.62109375,  170.6015625 ,  171.58203125,
            172.5625    ,  173.54296875,  174.5234375 ,  175.50390625,
            176.484375  ,  177.46484375,  178.4453125 ,  179.42578125,
            180.40625   ,  181.38671875,  182.3671875 ,  183.34765625,
            184.328125  ,  185.30859375,  186.2890625 ,  187.26953125,
            188.25      ,  189.23046875,  190.2109375 ,  191.19140625,
            192.171875  ,  193.15234375,  194.1328125 ,  195.11328125,
            196.09375   ,  197.07421875,  198.0546875 ,  199.03515625,
            200.015625  ,  200.99609375,  201.9765625 ,  202.95703125,
            203.9375    ,  204.91796875,  205.8984375 ,  206.87890625,
            207.859375  ,  208.83984375,  209.8203125 ,  210.80078125,
            211.78125   ,  212.76171875,  213.7421875 ,  214.72265625,
            215.703125  ,  216.68359375,  217.6640625 ,  218.64453125,
            219.625     ,  220.60546875,  221.5859375 ,  222.56640625,
            223.546875  ,  224.52734375,  225.5078125 ,  226.48828125,
            227.46875   ,  228.44921875,  229.4296875 ,  230.41015625,
            231.390625  ,  232.37109375,  233.3515625 ,  234.33203125,
            235.3125    ,  236.29296875,  237.2734375 ,  238.25390625,
            239.234375  ,  240.21484375,  241.1953125 ,  242.17578125,
            243.15625   ,  244.13671875,  245.1171875 ,  246.09765625,
            247.078125  ,  248.05859375,  249.0390625 ,  250.01953125,  251.        ]), <a list of 256 Patch objects>)
    plt.axis([0,256,0,256])
    plt.show()
    #le histogramme apparait bien avec sur 256 * 256 mais les valeurs afficher sont celles de l'array N°1 donc des 0,1,2,3 et des 4 et non les valeurs contenu dans a.
    j'ai essayer plusieurs possibilitées log=10 par ex ou utilisation du module array mais il semble que je ne sache pas ce qu'est véritablement un histogramme...? car j'ai remarquer qu'on pouvait(devait) multiplier les valeurs de a, ce que fait plt.hist() a merveille a mes déboirs de créer un graph représentant mes données, si quelq'un peut m'aider sa serai sympa et si vous trouver plus "mat pour des billes" que moi vous me faite signe.

    Merci de vos réponses.

    Que la force soit avec nous meme en dehors de la lune noire.
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Je ne connais pas bien matplotlib, mais tu devrais t'inspirer des exemples de son site. Il y a plusieurs exemples d'histogrammes:

    http://matplotlib.sourceforge.net/ => gallery.

    Tyrtamos
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    En complément, voici un exemple simple d'histogramme issu de la doc de matplotlib:

    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
     
    import numpy as np
    import matplotlib.pyplot as plt
     
    mu, sigma = 100, 15
    x = mu + sigma * np.random.randn(10000)
     
    # the histogram of the data
    n, bins, patches = plt.hist(x, 50, normed=1, facecolor='g', alpha=0.75)
     
    plt.xlabel('Smarts')
    plt.ylabel('Probability')
    plt.title('Histogram of IQ')
    plt.text(60, .025, r'$\mu=100,\ \sigma=15$')
    plt.axis([40, 160, 0, 0.03])
    plt.grid(True)
     
    plt.show()
    Tyrtamos
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  4. #4
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut
    Merci pour tes réponses tyrtamos,

    J'ai trouver mon bonheurs avec pyplot.bar() qui génere un histogramme comme je l'entend c.a.d avec un tableau pour les valeurs de x et un autre pour les valeurs de y, affichant une barre pour chaque valeur pour une valeur de l'autre, mais je rencontre la difficulté suivante:

    Mes données étant plus ou moins aléatoire j'ai remarquer que ce plot ne compte pas les barres ayant comme valeur zéro ce qui fausse les affichages de ylabel qui devrai etre de 0 jusqu'a 255 et non de 0 a 2 (avec des intervalles de 0.2) pour un tableau de données comportant deux valeurs supérieure a zéro et le reste de composer de zéros.

    Si quelqu'un connait, dans la multitude d'options de ce plot, le moyen d'afficher des non-barres (valeurs 0 dans le tableau) merci de poster une réponse car j'ai lu la doc et le help() mais je ne trouve pas la configuration, si elle existe. Le plot n'est pas configurable grace a axis() car les axes sont internes aux données de celui-çi.

    Un bout de code pour illustrer mon problème:
    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.pyplot as plt
    a=[]
    b=[]
    i=0
    while i < 256 : 
        a.append(i)
        if i == 0 :
          b.append(255)
        elif i == 1 :
          b.append(255)
        elif i != 0 or i != 1 :
          b.append(0)
        i += 1
     
    plt.bar(left=a, height=b, width=0.80000000000000004, bottom=None, color=None, edgecolor=None, linewidth=None, yerr=None, xerr=None, ecolor=None, capsize=3, align='edge', orientation='vertical', log=False, hold=None)
    plt.show()
    Sur ce, bon python a vous.
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

  5. #5
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut
    Pour remettre ma question a l'ordre du jours:
    J'utilise le plot de matplotlib pyplot.bar() qui prend en argument 2 listes d'entier une pour les valeurs de x l'autre pour les valeurs y et crée des barre verticale (voire horizontale en fonction des options fournis) représentant les valeurs de y en fonction de x.

    Mais mes données a fournir étant aléatoire il arrive que des valeurs de la liste des y soit nulle, mais pas de x qui sont toujours range(0,256).

    Le problème étant que quand des valeur de liste y sont nulle le plot ne prend pas en compte ces valeurs et les ignores ce qui fausse les données afficher qui ne vont plus de 0 a 255, mais de 0 au nombre de valeurs de y non nulles.

    Sa serai sympa si quelqu'un qui connait le moyen d'influer sur la configuration du plot afin qu'il prenne en compte les valeurs nulle et m'affiche un espace vide au lieu de ne pas prendre en compte celles-çis et de fausser mon graphique.
    Ou au pire de m'informer sur l'impossibilté d'influer sur la génération avec des valeurs nulles.
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

  6. #6
    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
    Aucun problème pour ce genre de choses. Ca marche très bien chez moi

  7. #7
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut
    Vous etes sous Windows ?
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

  8. #8
    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
    C'est indépendant de Windows ou Linux.

  9. #9
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut
    Alors tourner vous en 64 bits ?
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

  10. #10
    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 2.

  11. #11
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut
    Alors avez vous une idée d'ou viens mon problème, et etes vous sur que les deux labels sont numéroter de 0 a 255 chez vous si il ya des valeurs nulles dans les tableaux, je tourne sur Ubuntu 64 bits et chez moi sa dysfonctionne enfin ne fonctionne pas comme je le voudrai.
    Si vous pouvez m'aider merci de poster.
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

Discussions similaires

  1. Problème d'histogramme
    Par FlagadaBoum dans le forum Débuter
    Réponses: 0
    Dernier message: 03/05/2013, 11h10
  2. [JpGraph] problème étiquette histogramme
    Par hebus73 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 11/05/2012, 07h22
  3. problème avec Python, matplotlib et pygtk
    Par marwanos dans le forum Déploiement/Installation
    Réponses: 11
    Dernier message: 27/04/2010, 00h29
  4. Réponses: 24
    Dernier message: 30/05/2007, 13h53
  5. Problème d'histogramme d'image
    Par ana0801 dans le forum Images
    Réponses: 3
    Dernier message: 09/01/2007, 20h50

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