J'essaie de tracer un histogramme en utilisant la matplotlib.hist()
fonction mais je ne sais pas comment le faire.
J'ai une liste
probability = [0.3602150537634409, 0.42028985507246375,
0.373117033603708, 0.36813186813186816, 0.32517482517482516,
0.4175257731958763, 0.41025641025641024, 0.39408866995073893,
0.4143222506393862, 0.34, 0.391025641025641, 0.3130841121495327,
0.35398230088495575]
et une liste de noms (chaînes).
Comment définir la probabilité comme valeur y de chaque barre et les noms comme valeurs x?
python
matplotlib
visualization
data-visualization
DataVizGuys
la source
la source
Si vous n'avez pas encore installé matplotlib, essayez simplement la commande.
Import de bibliothèque
Les données de l'histogramme:
Afficher l'histogramme
Et la sortie est comme:
la source
Bien que la question semble exigeante pour tracer un histogramme à l'aide d'une
matplotlib.hist()
fonction, elle ne peut sans doute pas être effectuée en utilisant la même chose que la dernière partie de la question exige d'utiliser les probabilités données comme valeurs y des barres et des noms donnés (chaînes) comme valeurs x.Je suppose un exemple de liste de noms correspondant à des probabilités données pour dessiner l'intrigue. Un simple diagramme à barres sert ici le problème donné. Le code suivant peut être utilisé:
la source
C'est une vieille question mais aucune des réponses précédentes n'a abordé le vrai problème, c'est-à-dire le fait que le problème vient de la question elle-même.
Premièrement, si les probabilités ont déjà été calculées, c'est-à-dire que les données agrégées de l'histogramme sont disponibles de manière normalisée, les probabilités devraient s'additionner à 1. Ce n'est évidemment pas le cas et cela signifie que quelque chose ne va pas ici, soit avec la terminologie, soit avec les données ou dans la manière dont la question est posée.
Deuxièmement, le fait que les étiquettes soient fournies (et non des intervalles) signifierait normalement que les probabilités sont des variables de réponse catégorielles - et l'utilisation d'un diagramme à barres pour tracer l'histogramme est préférable (ou un piratage de la méthode hist du pyplot), La réponse de Shayan Shafiq fournit le code.
Cependant, voir le problème 1, ces probabilités ne sont pas correctes et utiliser un diagramme à barres dans ce cas comme «histogramme» serait faux car il ne raconte pas l'histoire de la distribution univariée, pour une raison quelconque (peut-être que les classes se chevauchent et que les observations sont comptées plusieurs fois?) et un tel tracé ne doit pas être appelé un histogramme dans ce cas.
L'histogramme est par définition une représentation graphique de la distribution d'une variable univariée (voir https://www.itl.nist.gov/div898/handbook/eda/section3/histogra.htm , https://en.wikipedia.org/wiki / Histogramme) et est créé en dessinant des barres de tailles représentant des nombres ou des fréquences d'observations dans des classes sélectionnées de la variable d'intérêt. Si la variable est mesurée sur une échelle continue, ces classes sont des cases (intervalles). Une partie importante de la procédure de création d'histogramme consiste à choisir comment regrouper (ou conserver sans regrouper) les catégories de réponses pour une variable catégorielle, ou comment diviser le domaine des valeurs possibles en intervalles (où placer les limites de la case) pour variable de type. Toutes les observations doivent être représentées et chacune une seule fois dans le graphique. Cela signifie que la somme des tailles des barres doit être égale au nombre total d'observations (ou à leurs surfaces dans le cas des largeurs variables, ce qui est une approche moins courante). Ou, si l'histogramme est normalisé, toutes les probabilités doivent totaliser 1.
Si les données elles-mêmes sont une liste de «probabilités» comme réponse, c'est-à-dire que les observations sont des valeurs de probabilité (de quelque chose) pour chaque objet d'étude, alors la meilleure réponse est simplement
plt.hist(probability)
avec l'option peut-être de regroupement, et l'utilisation d'étiquettes x déjà disponibles est méfiant.Ensuite, le graphique à barres ne doit pas être utilisé comme histogramme mais plutôt simplement
avec les résultats
matplotlib dans ce cas arrive par défaut avec les valeurs d'histogramme suivantes
le résultat est un tuple de tableaux, le premier tableau contient les décomptes d'observations, c'est-à-dire ce qui sera affiché par rapport à l'axe y du tracé (ils totalisent 13, le nombre total d'observations) et le deuxième tableau est les limites d'intervalle pour x -axe.
On peut vérifier qu'ils sont également espacés,
Ou, par exemple pour 3 bacs (mon jugement appelle 13 observations) on obtiendrait cet histogramme
avec les données de tracé "derrière les barreaux" étant
L'auteur de la question doit clarifier la signification de la liste de valeurs «probabilité» - la «probabilité» est-elle juste un nom de la variable de réponse (alors pourquoi y a-t-il des étiquettes x prêtes pour l'histogramme, cela n'a aucun sens ), ou les valeurs de liste sont-elles les probabilités calculées à partir des données (alors le fait qu'elles ne totalisent pas 1 n'a aucun sens).
la source
C'est une façon très ronde de le faire, mais si vous souhaitez créer un histogramme dans lequel vous connaissez déjà les valeurs de casier mais que vous n'avez pas les données source, vous pouvez utiliser la
np.random.randint
fonction pour générer le nombre correct de valeurs dans la plage de chaque bin pour la fonction hist à représenter graphiquement, par exemple:en ce qui concerne les étiquettes, vous pouvez aligner x graduations avec des bacs pour obtenir quelque chose comme ceci:
la source