大家好,我正在绘制三个不同的直方图,它们具有不同的总频率,但我想将它们归一化,使频率相同。
从图中可以看出,这三个集合的总频率不同,但我想对它们进行归一化,使它们的总频率相同,但我想保留x轴上每个值的频率比例。
下面是我用来绘制直方图的代码
setA = [22.972972972972972, 0.0, 0.0, 27.5, 25.0, 18.64406779661017, 8.88888888888889, 20.512820512820515, 11.11111111111111, 15.151515151515152, 17.741935483870968, 13.333333333333334, 16.923076923076923, 12.820512820512821, 27.77777777777778, 4.0, 0.0, 15.625, 14.814814814814815, 7.142857142857143, 15.384615384615385, 14.545454545454545, 38.095238095238095, 17.647058823529413, 21.951219512195124, 21.428571428571427, 32.432432432432435, 10.526315789473685, 36.8421052631579, 13.114754098360656, 17.91044776119403, 12.64367816091954, 16.0, 22.727272727272727, 18.181818181818183, 9.523809523809524, 17.105263157894736, 11.904761904761905, 20.58823529411765, 10.714285714285714, 15.686274509803921, 27.5, 16.129032258064516, 21.333333333333332, 40.90909090909091, 11.904761904761905, 13.157894736842104]
setB = [1.492537313432836, 3.5714285714285716, 17.94871794871795, 11.363636363636363, 13.513513513513514, 14.285714285714286, 15.686274509803921, 17.94871794871795, 9.090909090909092, 41.07142857142857, 10.714285714285714, 25.0, 20.0, 40.0, 13.333333333333334, 13.793103448275861, 3.5714285714285716, 17.073170731707318, 25.675675675675677, 15.625, 17.46031746031746, 8.333333333333334, 18.64406779661017, 14.285714285714286, 0.0, 6.0606060606060606, 6.976744186046512, 18.181818181818183, 26.785714285714285, 22.80701754385965, 6.666666666666667, 12.5]
setC = [13.846153846153847, 23.076923076923077, 25.0, 10.714285714285714, 16.666666666666668, 9.75609756097561, 10.0, 10.0, 17.857142857142858, 20.0, 9.75609756097561, 26.470588235294116, 12.5, 13.333333333333334, 4.3478260869565215, 5.882352941176471, 14.545454545454545, 13.333333333333334, 8.571428571428571, 11.764705882352942, 0.0]
plt.figure('sets')
n, bins, patches = plt.hist(setA, 20, alpha=0.40 , label = 'setA')
n, bins, patches = plt.hist(setB, 20, alpha=0.40 , label = 'setB')
n, bins, patches = plt.hist(setC, 20, alpha=0.40 , label = 'setC')
plt.xlabel('Set')
plt.ylabel('Frequency')
plt.title('Different Sets that need to be normalised')
plt.legend()
plt.grid(True)
plt.show()
作为一个加号,因为我的目标是能够比较三个集合的分布,有没有一个更好的视觉直方图,我可以用来比较他们更好的图形。
2条答案
按热度按时间pxq42qpu1#
您可以使用
normed=True
选项将直方图归一化。这意味着所有直方图的面积之和将为1。您还可以通过对所有三个直方图使用相同的固定条柱(使用
hist
的bins
选项:例如bins = np.arange(0,48,2)
)。试试这个:
另一个选择是在一次调用plt.hist中绘制所有三个直方图,在这种情况下,您可以使用
stacked=True
选项,它可以进一步清理您的图。注:此方法将所有三个直方图归一化,因此总积分为1。它不会使所有三个直方图的总和为相同的值。
最后,如果您不喜欢堆叠直方图,您可以将条形彼此相邻地绘制,方法是再次在一次调用中绘制所有三个直方图,但从上面的行中删除
stacked=True
选项:如注解中所讨论的,当使用
stacked=True
时,normed
选项仅意味着所有三个直方图的和将等于1,因此它们可能不会以与其他方法相同的方式被归一化。为了解决这个问题,我们可以使用
np.histogram
,并使用plt.bar
绘制结果。例如,使用上述相同的数据集:
3qpi33ja2#
我个人很喜欢这个功能:
样图: