web-dev-qa-db-fra.com

Comment tracer un histogramme à l'aide de Matplotlib dans Python avec une liste de données?

J'essaie de tracer un histogramme à l'aide de la fonction matplotlib.hist() 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 est-ce que je fais la probabilité en tant que ma valeur y de chaque barre et les nomme en tant que valeurs x?

66
DataVizGuys

Si vous voulez un histogramme, vous n'avez pas besoin d'attacher de "noms" aux valeurs x, car sur l'axe des x vous auriez des bacs:

import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
x = np.random.normal(size = 1000)
plt.hist(x, normed=True, bins=30)
plt.ylabel('Probability');

enter image description here

Toutefois, si vous avez un nombre limité de points de données et que vous souhaitez un graphique en barres, vous pouvez attacher des étiquettes à l'axe des x:

x = np.arange(3)
plt.bar(x, height= [1,2,3])
plt.xticks(x+.5, ['a','b','c'])

enter image description here

Faites-moi savoir si cela résout votre problème.

EDIT 26 novembre 2018

Comme indiqué ci-dessous, le code suivant suffira à partir de Matplotlib 3.0.2:

x = np.arange(3)
plt.bar(x, height= [1,2,3]) 
plt.xticks(x, ['a','b','c']) # no need to add .5 anymore

EDIT 23 mai 2019

En ce qui concerne l'histogramme, le paramètre normed est obsolète:

MatplotlibDeprecationWarning: Le kwarg "normé" était obsolète dans Matplotlib 2.1 et sera supprimé en 3.1. Utilisez plutôt "densité".

Donc, à partir de Matplolib 3.1 au lieu de:

plt.hist(x, normed=True, bins=30) 

il faut écrire:

import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
x = np.random.normal(size = 1000)
plt.hist(x, density=True, bins=30) # density
plt.ylabel('Probability');

enter image description here

114
Sergey Bushmanov

Si vous n'avez pas encore installé matplotlib, essayez simplement la commande.

> pip install matplotlib

Import de bibliothèque

import matplotlib.pyplot as plot

Les données de l'histogramme:

plot.hist(weightList,density=1, bins=20) 
plot.axis([50, 110, 0, 0.06]) 
#axis([xmin,xmax,ymin,ymax])
plot.xlabel('Weight')
plot.ylabel('Probability')

Afficher l'histogramme

plot.show()

Et la sortie est comme:

enter image description here

14
Niraj

C'est une façon très détournée de le faire, mais si vous voulez créer un histogramme dans lequel vous connaissez déjà les valeurs de bac, mais n'avez pas les données source, vous pouvez utiliser la fonction np.random.randint pour générer le nombre correct de valeurs. dans la plage de chaque case pour la fonction hist à représenter, par exemple:

import numpy as np
import matplotlib.pyplot as plt

data = [np.random.randint(0, 9, *desired y value*), np.random.randint(10, 19, *desired y value*), etc..]
plt.hist(data, histtype='stepfilled', bins=[0, 10, etc..])

en ce qui concerne les étiquettes, vous pouvez aligner x ticks avec des bacs pour obtenir quelque chose comme ceci:

#The following will align labels to the center of each bar with bin intervals of 10
plt.xticks([5, 15, etc.. ], ['Label 1', 'Label 2', etc.. ])
2
Connor Wilmers