Я задал похожий вопрос, на который был дан отличный ответ.
Задать цвета в столбчатой диаграмме с накоплением для метки
def gen_colors(df):
col_d = {'B1': 'red', 'B2': 'black', 'B3': 'green'}
return [col_d[col] for col in df.columns if 'B' in col]
sns.set()
d = {'DAY': [55,56,58,65], 'B1': [2,6,6,1], 'B2': [1,0,21,0], 'B3': [0,1,0,1]}
data1 = pd.DataFrame(data = d)
data1.set_index('DAY').plot(kind='bar', stacked=True, color=gen_colors(data1))
Теперь я строю это на примере, например, что если мы не знаем расширение метки. (Невозможно заранее знать расширения меток, и они будут иметь имена, такие как B1_Active, B2_Missing, B3_Double .. (Имя после B * называется статусом поля)
def gen_colors(df):
col_d = {'B1': 'red','B1_Missing': 'firebrick', 'B2': 'black', 'B3': 'green'}
return [col_d[col] for col in df.columns if 'B' in col]
t = {'DAY': [55,56,58,65], 'B1_Active': [2,6,6,1], 'B3_Missing': [0,1,0,1]}
toy1 = pd.DataFrame(data = t)
try:
toy1.set_index('DAY').plot(kind='bar', stacked=True, color=gen_colors(toy1))
except:
toy1.set_index('DAY').plot(kind='bar', stacked=True)
Это просто приводит к случайному выбору цветов. Как сделать словарь, чтобы дать разные оттенки красного цвета, когда метка начинается с B1, например, B1_Active = красный, B1_Missing = огнеупорный кирпич и т. Д. Я хочу сохранить основной цвет одинаковым для всех комбинаций B1, но добавить легкий оттенок, чтобы дифференцировать статус .. это возможно? Я искал в словаре "поймать все", но не смог работать с регулярным выражением. Спасибо
Также это палитра: