我在python中绘制了直方图,使用matplotlib,我需要y轴作为概率,我找不到如何做到这一点。例如,我希望它看起来与此http://www.mathamazement.com/images/Pre-Calculus/10_Sequences-Series-and-Summation-Notation/10_07_Probability/10-coin-toss-histogram.JPG
类似这是我的代码,如果需要,我会附上我的情节
plt.figure(figsize=(10,10))
mu = np.mean(a) #mean of distribution
sigma = np.std(a) # standard deviation of distribution
n, bins,patches=plt.hist(a,bin, normed=True, facecolor='white')
y = mlab.normpdf(bins, mu, sigma)
plt.plot(bins,y,'r--')
print np.sum(n*np.diff(bins))# proved the intergal over bars is unity
plt.show()
答案 0 :(得分:2)
将所有样品计数除以样品总数。这给出概率而不是计数。
答案 1 :(得分:0)
正如@SteveBarnes指出的那样,将样本计数除以样本总数以获得每个bin的概率。要获得与您链接的图形相似的图形,您的“区间”应该是0到10之间的整数。从离散分布计算样本直方图的一种简单方法是np.bincount
。
这是一个片段,可以创建一个类似于您链接到的图表:
import numpy as np
import matplotlib.pyplot as plt
n = 10
num_samples = 10000
# Generate a random sample.
a = np.random.binomial(n, 0.5, size=num_samples)
# Count the occurrences in the sample.
b = np.bincount(a, minlength=n+1)
# p is the array of probabilities.
p = b / float(b.sum())
plt.bar(np.arange(len(b)) - 0.5, p, width=1, facecolor='white')
plt.xlim(-0.5, n + 0.5)
plt.xlabel("Number of heads (k)")
plt.ylabel("P(k)")
plt.show()