Если я правильно понимаю ваш вопрос, я думаю, что код ниже сделает то, что вы предлагаете. Кажется, он немного отличается от подхода, который вы рассматривали, и я не уверен, что он более эффективен. Несмотря на это, обычно помогает увидеть, как кто-то еще что-то сделает. Предполагается, что уже сгенерированный pdf (гистограмма) содержит ячейки, представленные переменными «ячейками», и ширину ячейки, представленную переменной «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)