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 :

[Matplotlib] histograme


Sujet :

Calcul scientifique Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2006
    Messages : 30
    Points : 34
    Points
    34
    Par défaut [Matplotlib] histograme
    Bonjour,

    J'utilise la librarie Matplotlib pour tracer des figures, mais j'avais besoin de tracer histograme, j'ai utilisé la fonction 'hist', cette fonction donne le nombre des points entre chaque scale, mais pas le pourcentage.

    C-à-d, quand j'écris :

    x=[1,2,0.5,1,0.5,6,6.5]

    hist(x,3)

    ca me donne, ([5,0,2,], [ 0.5, 2.5, 4.5,], <a list of 3 Patch objects>)

    c-à-d que entre [0.5 2.5] il y a 5 valeurs de x ect.....

    et moi, j'ai besoin d'affciher le pourcentage pas le nombre des points.
    c-à-d le pourcentage de point qui se trouve dans l'intervalle [0.5 2.5] ect..

    Est-ce-que c'est faisable?

    Merci et Bonne journée

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 36
    Points : 31
    Points
    31
    Par défaut
    Salut!

    Je n'ai pas Python d'installé sur cet ordi donc difficile pour le moment de te donner une réponse précise...

    Mais est-ce que la solution de diviser le nombre d'occurences par la longueur de x n'est pas envisageable?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    x=[1,2,0.5,1,0.5,6,6.5]
     
    tab = float(hist(x,3)[0] / len(x))
    Tu devrais avoir [0.71,0,0.29]... la conversion en float est nécessaire pour éviter d'avoir [0,0,0] mais je ne sais pas si elle marchera bien écrite comme ça...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2006
    Messages : 30
    Points : 34
    Points
    34
    Par défaut Bonjour
    Vu que vous n'avez pas installé python sur votre ordi, j'ai essayé le code mais ca marche, il m'affiche un erreur :

    float(hist(x,3)[0]/len(x))

    Traceback (most recent call last):
    File "<pyshell#8>", line 1, in ?
    float(hist(x,3)[0]/len(x))
    TypeError: only length-1 arrays can be converted to Python scalars.

    par contre, j'ai une question à vous poser et que je ne comprends pas.

    lorsque j'écris : hist(x,3)[0] ca me donne : [5,0,2,]
    par contre lorsque je divise hist(x,3)[0]/len(x), ca me donne [0,0,0]
    pourquoi des zeros ca je ne comprends pas ???

    Merci de repondre
    et bonne journée

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 36
    Points : 31
    Points
    31
    Par défaut
    Arf, c'est bien ce que je pensais, la conversion en flottants ne passe pas.

    Mais bon cette fois j'ai daigné lever mes fesses pour aller sur un ordi avec Python, et donc je peux t'assurer que ça marche!

    Si Python n'affiche que des 0, c'est parce que la division par défaut inclue dans python est euclidienne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>>1/2
    0
    >>>1./2     ## on ajoute un point pour indiquer qu'on veut un résultat flottant
    0.5
    Il faut convertir le tableau [5,0,2,] d'entiers en tabelau de flottants, ce que j'essayais de faire avec float... de manière un peu brutale.
    Donc la soluce:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import matplotlib.pylab as m
     
    x=[1,2,0.5,1,0.5,6,6.5]
    tab = m.array( m.hist(x,3)[0], 'd') / len(x)
    Et le tour est joué!!
    A signaler aussi l'existence d'une option normed pour la méthode hist. Elle effectue un calcul différent qui doit pouvoir se transformer en ce que tu veux. Ce n'est pas normalisé en tout cas...

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2006
    Messages : 30
    Points : 34
    Points
    34
    Par défaut je vous remercie
    tout dit dans le titre

    Bonne choirée

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

Discussions similaires

  1. [Zope] Matplotlib
    Par ark42 dans le forum Zope
    Réponses: 4
    Dernier message: 31/05/2008, 19h30
  2. [matplotlib] 3D
    Par Makino dans le forum Calcul scientifique
    Réponses: 1
    Dernier message: 05/04/2006, 16h36
  3. wxPython + MatPlotLib + py2exe
    Par bibile dans le forum Py2exe
    Réponses: 1
    Dernier message: 05/08/2005, 22h49
  4. Probleme python 2.4 et matplotlib : unicode encode error
    Par patfrat dans le forum Calcul scientifique
    Réponses: 1
    Dernier message: 12/06/2005, 00h30
  5. Affichage de données (histograme, graphe etc.)
    Par sunshine33 dans le forum Autres Logiciels
    Réponses: 11
    Dernier message: 13/01/2004, 14h16

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