Python/matplotlib 在直方图中显示置信水平

3 投票
1 回答
4508 浏览
提问于 2025-04-16 18:46

我遇到了一些问题。我有一些数据,我把它们分成了不同的组,得到了一个“数字化”的PDF,这个部分没问题。 现在,我想找个方法,通过给不同的组上不同的颜色来表示不同的置信区间。 具体来说,我想从包含最多数据的组开始,把所有这些组的颜色涂成红色,直到它们的总面积小于0.6。然后,我会继续选择新的组,按照数据量从大到小的顺序,把那些能把红色区域增加到0.8的组涂成橙色。 我在考虑用numpy来获取这些组和数据量,把它们分成三类(红色、橙色和原来的颜色),然后用pyplot的条形图来绘制。 希望你能给我指个更快的方法,谢谢!

1 个回答

6

如果我理解你的问题没错的话,下面的代码应该能实现你想要的效果。它的做法和你考虑的方式有点不同,我也不确定这样做是否更有效。不过,看看别人是怎么做的通常是有帮助的。这个代码假设你已经有了一个生成好的PDF(直方图),其中“bins”变量表示数据的分组,而“binwidth”变量表示每个分组的宽度。

gray = (.5,.5,.5)
orange = (1.0, 0.647, 0.0)
red = (1.0, 0.0, 0.0)

clrs = [gray for xx in bins]

idxs = pdf.argsort()
idxs = idxs[::-1]
oranges = idxs[(cumsum(pdf[idxs])*binwidth < 0.8).nonzero()]
reds = idxs[(cumsum(pdf[idxs])*binwidth < 0.6).nonzero()]

for idx in oranges:
    clrs[idx] = orange

for idx in reds:
    clrs[idx] = red

bar(left=bins,height=pdf,width=binwidth,color=clrs)

这是我得到的结果的视图,以及相关的PDF和CDF

撰写回答