How to normalize a histogram in python?

前端 未结 5 1162
星月不相逢
星月不相逢 2021-02-12 11:35

I\'m trying to plot normed histogram, but instead of getting 1 as maximum value on y axis, I\'m getting different numbers.

For array k=(1,4,3,1)

 import         


        
5条回答
  •  傲寒
    傲寒 (楼主)
    2021-02-12 11:53

    When you plot a normalized histogram, it is not the height that should sum up to one, but the area underneath the curve should sum up to one:

    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).

    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))
    

    enter image description here

提交回复
热议问题