tracé des histogrammes dont le bar somme des hauteurs de 1 à matplotlib
Je voudrais tracer un histogramme normalisé à partir d'un vecteur à l'aide de matplotlib. J'ai essayé le suivant:
plt.hist(myarray, normed=True)
ainsi que:
plt.hist(myarray, normed=1)
mais ni option produit un axe y de [0, 1] telle que la barre à des hauteurs de l'histogramme somme de 1. J'aimerais produire un tel histogramme-comment puis-je le faire?
merci!
- Je sais que c'est vieux, mais pour l'avenir de référence & n'importe qui qui visite cette page, ce genre de l'axe de propagation est appelé une "densité de probabilité" de l'axe!
Vous devez vous connecter pour publier un commentaire.
Il serait plus utile si vous avez posé une plus complète de travail (ou dans ce cas de non-travail) exemple.
J'ai essayé le suivant:
Ce sera en effet de produire un graphique de l'histogramme avec un axe y qui va de
[0,1]
.De plus, comme par le
hist
de la documentation (c'est à direax.hist?
deipython
), je pense que la somme est trop belle:Donner à ceci un essai après la commande ci-dessus:
- Je obtenir une valeur de retour de
1.0
comme prévu. Rappelez-vous quenormed=True
ne signifie pas que la somme de la valeur de chaque bar sera à l'unité, mais plutôt que l'intégrale sur les barres, c'est l'unité. Dans mon cas,np.sum(n)
retourné env7.2767
.Si vous souhaitez calculer la somme de tous les bars à être égale à l'unité, le poids de chaque compartiment par le nombre total de valeurs:
Espère que ça aide, même si le fil est assez vieux...
array_like
plutôt qu'un tableau numpy, vous aurez besoin de jeterlen(myarray)
àfloat
.Je sais que cette réponse est trop tard l'examen de la question est daté de 2010, mais je suis tombé sur cette question, comme je l'ai été confronté à un problème similaire moi-même. Comme déjà indiqué dans la réponse, normé=True signifie que la surface totale de l'histogramme est égale à 1, mais la somme des hauteurs n'est pas égal à 1. Cependant, j'ai voulu, pour des raisons de commodité de l'interprétation physique d'un histogramme, faire un avec la somme des hauteurs égales à 1.
J'ai trouvé une allusion à la question suivante - Python: Histogramme de la zone normalisée à autre chose que 1
Mais je n'étais pas en mesure de trouver un moyen de faire des barres imiter le histtype="étape" fonction hist(). Cette détournés moi : Matplotlib Intensifié histogramme avec déjà placés dans un conteneur de données
Si la communauté estime qu'elle est acceptable, je tiens à mettre en avant une solution qui synthétise les idées de ces deux postes.
Cela a fonctionné à merveille pour moi, même si, dans certains cas, j'ai remarqué que le plus à gauche "bar" ou le plus à droite de "barre" de l'histogramme ne pas fermer en touchant le point le plus bas de l'axe des ordonnées. Dans un tel cas, l'ajout d'un élément 0 à la mendicité ou à la fin de y atteint le résultat nécessaire.
Juste pensé que je vous ferais partager mon expérience. Merci.
Voici une solution simple à l'aide de
np.histogram()
méthode.En effet, vous pouvez vérifier que le total des sommes allant jusqu'à 1: