Создайте словарь и сопоставьте столбцы с этими цветами.Поскольку мы перебираем столбцы, цвета будут в том же порядке, что и столбцы.Вам нужно будет определить цвета для всех ваших различных столбцов.
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))
t = {'DAY': [55,56,58,65], 'B1': [2,6,6,1], 'B3': [0,1,0,1]}
toy1 = pd.DataFrame(data = t)
toy1.set_index('DAY').plot(kind='bar', stacked=True, color=gen_colors(toy1))
Это, однако, делаетне гарантировать, что порядок соответствует.То есть, если ваш DataFrame упорядочен по-разному, хотя B3 всегда будет одного цвета, он может оказаться выше или ниже B1 при штабелировании.Более последовательным решением является переиндексация.Вы должны включить все Bi
, которые найдены во всех ваших фреймах данных, которые должны отображаться последовательно.Здесь я выбрал произвольно большое число от 1 до 9:
t = {'DAY': [55,56,58,65], 'B3': [0,1,0,1], 'B1': [2,6,6,1]}
toy1 = pd.DataFrame(data = t)
toy1 = toy1.reindex(['DAY'] + [f'B{i}' for i in range(1,10)], axis=1)
toy1.set_index('DAY').plot(kind='bar', stacked=True)
Хотя B3 появляется первым в DataFrame, он все же отображается на графике выше B1и с третьим цветом в цикле.