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

后端 未结 3 488
庸人自扰
庸人自扰 2021-02-01 07:01

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 i

相关标签:
3条回答
  • 2021-02-01 07:46

    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

    0 讨论(0)
  • 2021-02-01 07:51

    The line plot you are producing does not line up as the x values being used are the bin edges. You can calculate the bin centers as follows: bin_centers = 0.5*(x[1:]+x[:-1]) Then the complete code would be:

    noise = np.random.normal(0,1,(1000,1))
    n,x,_ = plt.hist(noise, bins = np.linspace(-3,3,7), histtype=u'step' )
    bin_centers = 0.5*(x[1:]+x[:-1])
    plt.plot(bin_centers,n) ## using bin_centers rather than edges
    plt.show()
    

    If you want the plot filled to y=0 then use plt.fill_between(bin_centers,n)

    0 讨论(0)
  • 2021-02-01 07:53

    Matplotlib's thumbnail gallery is usually quite helpful in situations like yours. A combination of this and this one from the gallery with some customizations is probably very close to what you have in mind:

    import numpy as np
    import matplotlib.mlab as mlab
    import matplotlib.pyplot as plt
    
    mu = 0
    sigma = 1
    noise = np.random.normal(mu, sigma, size=1000)
    num_bins = 7
    n, bins, _ = plt.hist(noise, num_bins, normed=1, histtype='step')
    y = mlab.normpdf(bins, mu, sigma)
    plt.plot(bins, y, 'r--')
    plt.show()
    

    enter image description here

    Also, increasing the number of bins helps...

    enter image description here

    0 讨论(0)
提交回复
热议问题