Гистограмма со сложенными компонентами

Допустим, у меня есть значение, которое я измерял каждый день в течение последних 90 дней. Я хотел бы построить гистограмму значений, но я хочу, чтобы зритель мог легко увидеть, где измерения накопились за определенные непересекающиеся подмножества за последние 90 дней. Я хочу сделать это, "подразделив" каждый столбец гистограммы на куски. Один кусок для самых ранних наблюдений, один для самых последних, один для самых последних.

Это звучит как работа дляdf.plot(kind='bar', stacked=True) но у меня проблемы с получением правильных деталей.

Вот что у меня так далеко:

import numpy as np
import pandas as pd
import seaborn as sbn

np.random.seed(0)

data = pd.DataFrame({'values': np.random.randn(90)})
data['bin'] = pd.cut(data['values'], 15, labels=False)
forhist = pd.DataFrame({'first70': data[:70].groupby('bin').count()['bin'],
                         'next15': data[70:85].groupby('bin').count()['bin'],
                         'last5': data[85:].groupby('bin').count()['bin']})

forhist.plot(kind='bar', stacked=True)

И это дает мне:

Этот график имеет некоторые недостатки:

Бары сложены в неправильном порядке.last5 должно быть сверху иnext15 в середине. То есть они должны быть расположены в порядке столбцов вforhist.Между решетками горизонтальное пространствоОсь X помечена целыми числами, а не чем-то, что указывает на значения, которые представляют ячейки. Мой «первый выбор» будет иметь метку оси X точно так же, как если бы я просто побежалdata['values'].hist(), Мой «второй выбор» - пометить ось X «именами бинов», которые я получу, если сделаю это.pd.cut(data['values'], 15), В моем коде я использовалlabels=False потому что, если бы я этого не сделал, он использовал бы метки краев бина (как строки) в качестве меток столбцов, и поместил бы их в алфавитном порядке, делая график в основном бесполезным.

Какой лучший способ подойти к этому? Я чувствую, что пока использую очень неуклюжие функции.

Ответы на вопрос(1)

Ваш ответ на вопрос