制作直方图概率的y轴,python

时间:2013-12-12 15:58:18

标签: python numpy matplotlib

我在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()

2 个答案:

答案 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()

plot