如何在python中绘制概率质量函数

kmo*_*ley 7 python numpy probability-density

如何创建一个直方图,显示给定数字x的范围为0-1的概率分布?我希望每个条形<= 1,如果我将每个条形的y值相加,它们应该加起来为1.

例如,如果x = [.2,.2,.8],那么我希望图形显示2个条形图,一个在.2处,高度为.66,一个在.8处,高度为.33.

我试过了:

matplotlib.pyplot.hist(x, bins=50, normed=True)
Run Code Online (Sandbox Code Playgroud)

这给了我一个高于1的条形图的直方图.我不是说那是错的,因为这是诺曼底参数根据文档做的,但是没有显示概率.

我也尝试过:

counts, bins = numpy.histogram(x, bins=50, density=True)
bins = bins[:-1] + (bins[1] - bins[0])/2
matplotlib.pyplot.bar(bins, counts, 1.0/50)
Run Code Online (Sandbox Code Playgroud)

这也给了我的y值总和大于1的柱子.

kmo*_*ley 6

我认为我原来的术语是关闭的.我有一个连续值[0-1]的数组,我想离散并用于绘制概率质量函数.我认为这可能足以保证一种方法来做到这一点.

这是代码:

x = [random.random() for r in xrange(1000)]
num_bins = 50
counts, bins = np.histogram(x, bins=num_bins)
bins = bins[:-1] + (bins[1] - bins[0])/2
probs = counts/float(counts.sum())
print probs.sum() # 1.0
plt.bar(bins, probs, 1.0/num_bins)
plt.show()
Run Code Online (Sandbox Code Playgroud)

  • 你能解释为什么这部分是必要的吗?bins = bin [: - 1] +(bin [1] - bin [0])/ 2 (2认同)