Comment choisir les bacs dans l'histogramme de matplotlib

quelqu'un Peut-il m'expliquer ce que "poubelles" dans l'histogramme (l' matplotlib hist function)? Et en supposant que je doive tracer la fonction de densité de probabilité de certaines données, comment les bacs que je choisis influencent-ils cela? et comment puis-je choisir? (J'ai déjà lu à leur sujet dans le matplotlib.pyplot.hist et numpy.histogramme bibliothèques, mais je n'ai pas eu l'idée)

17
demandé sur SherylHohman 2015-11-01 05:13:32

3 réponses

bins paramètre indique le nombre de bacs que vos données seront divisées en. Vous pouvez le spécifier comme un entier ou comme une liste des bords de bin.

par exemple, nous demandons ici 20 bacs:

import numpy as np
import matplotlib.pyplot as plt

x = np.random.randn(1000)
plt.hist(x, bins=20)

enter image description here

et ici nous demandons des bordures de bac aux endroits [-4, -3, -2... 3 et 4].

plt.hist(x, bins=range(-4, 5))

enter image description here

Votre question sur la façon de choisir le "meilleur" nombre de bacs est intéressante, et il y a en fait une très vaste littérature sur le sujet. Il y a quelques règles générales couramment utilisées qui ont été proposées (par exemple le Freedman-Diaconis Rule,Sturges " la Règle, Scott est la Règle, la racine Carrée de la règle, etc.) dont chacune a ses propres forces et faiblesses.

si vous voulez une implémentation Python agréable d'une variété de ces règles d'histogramme auto-accordantes, vous pouvez vérifier la fonctionnalité d'histogramme dans la dernière version du paquet AstroPy,décrit ici. Cela fonctionne exactement comme plt.hist, mais vous permet d'utiliser la syntaxe comme, par exemple,hist(x, bins='freedman') pour le choix des bacs selon la règle Freedman-Diaconis mentionnée ci-dessus.

Mon préféré est "Bayésien Blocs" (bins="blocks"), qui résout pour un binning optimal avec inégale largeur de la cellule. Vous pouvez lire un peu plus sur ce ici.


Edit, avril 2017: avec la version matplotlib 2.0 ou plus tard et numpy version 1.11 ou plus tard, vous pouvez maintenant spécifier des bins déterminés automatiquement directement dans matplotlib, en spécifiant, par exemple bins='auto'. Cela utilise le maximum du choix de bin Sturges et Freedman-Diaconis. Vous pouvez lire plus sur les options dans le numpy.histogram docs.

23
répondu jakevdp 2017-04-27 20:22:20

Bacs, le nombre d'intervalles à diviser l'ensemble de vos données, telle qu'elle peut être affichée comme les barres de l'histogramme. Une méthode simple pour travailler notre combien de bacs sont appropriés est de prendre la racine carrée du nombre total de valeurs dans votre distribution.

3
répondu Oliver Angelil 2015-11-01 03:18:59

vous avez raison de vous attendre à ce que le nombre de bacs ait un impact significatif sur l'approximation de la véritable distribution sous-jacente. Je n'ai pas lu le papier original moi-même, mais selon Scott 1979, une bonne règle de base est d'utiliser:

R(n^(1/3)) / (3.49 σ)

  • R est la plage de données (dans votre cas