J'ai besoin de créer un histogramme qui trace une ligne et non un graphique en étapes ou en barres. J'utilise python 2.7 La fonction plt.hist ci-dessous trace une ligne en escalier et les bacs ne s'alignent pas dans la fonction plt.plot.
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)
J'ai besoin que la ligne soit en corrélation avec le nombre de chaque casier au centre des casiers comme s'il y avait un indicateur histtype = u'line 'pour aller avec le drapeau align = u'mid'
En utilisant scipy, vous pourriez tilisez stats.gaussian_kde
à estimer la fonction de densité de probabilité :
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()
Le tracé de ligne que vous produisez ne s'aligne pas car les valeurs x utilisées sont les bords du bac. Vous pouvez calculer les centres de bacs comme suit: bin_centers = 0.5*(x[1:]+x[:-1])
Alors le code complet serait:
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()
Si vous voulez que le tracé soit rempli à y = 0, utilisez plt.fill_between(bin_centers,n)
la galerie de miniatures de Matplotlib est généralement très utile dans des situations comme la vôtre. Une combinaison de this et this one de la galerie avec quelques personnalisations est probablement très proche de ce que vous avez en tête:
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()
De plus, l'augmentation du nombre de bacs aide ...