When plotting a normalized histogram, the area under the curve should sum to 1, not the height.
In [44]:
import matplotlib.pyplot as plt
k=(3,3,3,3)
x, bins, p=plt.hist(k, density=True) # used to be normed=True in older versions
from numpy import *
plt.xticks( arange(10) ) # 10 ticks on x axis
plt.show()
In [45]:
print bins
[ 2.5 2.6 2.7 2.8 2.9 3. 3.1 3.2 3.3 3.4 3.5]
Here, this example, the bin width is 0.1, the area underneath the curve sums up to one (0.1*10).
x
stores the height for each bins. p
stores each of those individual bins objects (actually, they are patches
. So we just sum up x
and modify the height of each bin object.
To have the sum of height to be 1, add the following before plt.show()
:
for item in p:
item.set_height(item.get_height()/sum(x))