Python: matplotlib - 将概率质量函数作为直方图。

问题描述 投票:3回答:2

我想在同一张图上画一个直方图和一个折线图,但是,我需要把直方图作为一个概率质量函数,所以我想在Y轴上有一个概率值。然而,要做到这一点,我需要将直方图作为一个概率质量函数,所以我想在Y轴上有一个概率值。然而,我不知道如何做到这一点,因为使用的是 normed 选项没有帮助。下面是我的源码和使用过的数据偷拍。我将非常感谢所有的建议。

data = [12565, 1342, 5913, 303, 3464, 4504, 5000, 840, 1247, 831, 2771, 4005, 1000, 1580, 7163, 866, 1732, 3361, 2599, 4006, 3583, 1222, 2676, 1401, 2598, 697, 4078, 5016, 1250, 7083, 3378, 600, 1221, 2511, 9244, 1732, 2295, 469, 4583, 1733, 1364, 2430, 540, 2599, 12254, 2500, 6056, 833, 1600, 5317, 8333, 2598, 950, 6086, 4000, 2840, 4851, 6150, 8917, 1108, 2234, 1383, 2174, 2376, 1729, 714, 3800, 1020, 3457, 1246, 7200, 4001, 1211, 1076, 1320, 2078, 4504, 600, 1905, 2765, 2635, 1426, 1430, 1387, 540, 800, 6500, 931, 3792, 2598, 5033, 1040, 1300, 1648, 2200, 2025, 2201, 2074, 8737, 324]
plt.style.use('ggplot')
plt.rc('xtick',labelsize=12)
plt.rc('ytick',labelsize=12)
plt.xlabel("Incomes")
plt.hist(data, bins=50, color="blue", alpha=0.5, normed=True)
plt.show() 
python python-2.7 matplotlib plot histogram
2个回答
6
投票

据我所知。matplotlib 没有内置这个功能。 然而,要复制这个功能是很容易的

    import numpy as np
    heights,bins = np.histogram(data,bins=50)
    heights = heights/sum(heights)
    plt.bar(bins[:-1],heights,width=(max(bins) - min(bins))/len(bins), color="blue", alpha=0.5)

编辑:下面是另一种方法,来自 类似问题:

     weights = np.ones_like(data)/len(data)
     plt.hist(data, bins=50, weights=weights, color="blue", alpha=0.5, normed=False) 

1
投票

这是个老例子了,但是因为我发现了它,并且在我注意到一些错误之前就准备使用它,我想我应该为我注意到的几个修正添加一个评论。在 @mmdanziger 的例子中,他使用了在 plt.bar然而,你需要实际使用仓的中心。另外,他们假设仓的宽度是相等的,这在大多数情况下是没有问题的,但你也可以传给它一个宽度的数组,这样可以防止你无意中忘记和犯错。但是你也可以给它传递一个宽度的数组,这样可以防止你无意中忘记而犯错。所以这里有一个比较完整的例子。

import numpy as np
heights, bins = np.histogram(data, bins=50)
heights = heights/sum(heights)
bin_centers = 0.5*(bins[1:] + bins[:-1])
bin_widths = np.diff(bins)
plt.bar(bin_centers, heights, width=bin_widths, color="blue", alpha=0.5)

@mmdanziger 传递的另一个选项是: weights = np.ones_like(data)/len(data) to plt.hist()也能做同样的事情,对很多人来说是一个更简单的方法。

© www.soinside.com 2019 - 2024. All rights reserved.