如何创建一个直方图来显示给定范围为 0-1 的数字 x 数组的概率分布?我希望每个柱状图 <= 1,如果我将每个柱状图的 y 值相加,它们应该加起来为 1。
例如,如果 x=[.2, .2, .8] 那么我希望图表显示 2 个条形图,一个在 .2 处,高度为 .66,一个在 .8 处,高度为 .33。
我试过:
matplotlib.pyplot.hist(x, bins=50, normed=True)
这给了我一个直方图,其中的条形高于 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)
这也为我提供了 y 值总和大于 1 的条。
最佳答案
我认为我原来的术语不对。我有一组连续值 [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()
关于python - 如何在 python 中绘制概率质量函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19503366/