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?
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');
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'])
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');
Si vous n'avez pas encore installé matplotlib, essayez simplement la commande.
> pip install matplotlib
import matplotlib.pyplot as plot
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')
plot.show()
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.. ])