Search code examples
pythonplothistogram

Is there a clean way to generate a line histogram chart?


I need to create a histogram that plots a line and not a step or bar chart. I am using python 2.7 The plt.hist function below plots a stepped line and the bins don't line up in the plt.plot function.

import matplotlib.pyplot as plt
import numpy as np
noise = np.random.normal(0,1,(1000,1))
(n,x,_) = plt.hist(noise, bins = np.linspace(-3,3,7), histtype=u'step' )  
plt.plot(x[:-1],n)

I need the line to correlate with each bin's count at the bin centers as if there was a histtype=u'line' flag to go with the align=u'mid' flag


Solution

  • Using scipy, you could use stats.gaussian_kde to estimate the probability density function:

    import matplotlib.pyplot as plt
    import numpy as np
    import scipy.stats as stats
    
    noise = np.random.normal(0, 1, (1000, ))
    density = stats.gaussian_kde(noise)
    n, x, _ = plt.hist(noise, bins=np.linspace(-3, 3, 50), 
                       histtype=u'step', density=True)  
    plt.plot(x, density(x))
    plt.show()
    

    enter image description here