#python #pandas #matplotlib #graph #seaborn
#python #панды #matplotlib #График #seaborn
Вопрос:
Я создаю комбинированный столбчатый и линейный график, но цвета оттенков различны для каждого типа графика, даже если их значения одинаковы и все является общим.
report_date shift 999 load_count
0 2019-03-31 1 42 227.0
1 2019-03-31 2 13 141.0
2 2019-03-31 3 79 267.0
3 2019-04-01 1 146 580.0
4 2019-04-01 2 177 627.0
5 2019-04-01 3 127 460.0
6 2019-04-02 1 192 583.0
7 2019-04-02 2 121 626.0
8 2019-04-02 3 98 291.0
9 2019-04-03 1 172 580.0
10 2019-04-03 2 83 372.0
11 2019-04-03 3 78 323.0
12 2019-04-04 1 83 403.0
13 2019-04-04 2 69 340.0
14 2019-04-04 3 86 268.0
15 2019-04-05 1 164 567.0
16 2019-04-05 2 169 593.0
17 2019-04-05 3 48 249.0
18 2019-04-06 1 102 304.0
19 2019-04-06 2 48 246.0
20 2019-04-06 3 4 0.0
dfg = df.set_index(['report_date', 'shift']).sort_index(level=[0,1])
fig, ax = plt.subplots(figsize=(15,6))
ax2 = ax.twinx()
sns.barplot(x=dfg.index.get_level_values('report_date'),
y=dfg.load_count,
hue=dfg.index.get_level_values('shift'), ax=ax, alpha=0.7)
sns.lineplot(x=dfg.index.get_level_values('report_date'),
y=dfg['999'],
hue=dfg.index.get_level_values('shift'), ax=ax2, marker='o', legend=None)
ax.set_title('My Graph')
plt.show()
Я даже установил одну и ту же категорию Y, и даже тогда цвета разные. Если я изменю цветовую палитру, цвета по-прежнему будут разными, просто разными оттенками палитры.
ПОЧЕМУ это происходит? Категории являются общими, поэтому они должны вести себя одинаково. Почему это происходит?
Комментарии:
1. Хотя я воспроизводю ваш текущий результат с помощью пустого аргумента палитры , я не могу воспроизвести: если я изменю цветовую палитру, цвета по-прежнему будут разными, просто разными оттенками палитры. Пожалуйста, покажите эту попытку.
Ответ №1:
Я думаю, это потому sns
, что рассматривает линейные графики как разные категории и отображает их как одну и ту же последовательность barplots
. Один из способов — указать палитру:
fig, ax = plt.subplots(figsize=(15,6))
ax2 = ax.twinx()
palette = {1:'red', 2:'blue', 3:'green'}
sns.barplot(x=df['report_date'],
y=df.load_count,
hue=df['shift'], ax=ax, alpha=0.7,
palette=palette)
sns.lineplot(x=df['report_date'],
y=df['999'],
hue=df['shift'], ax=ax2, marker='o', legend=None,
palette=palette)
ax.set_title('My Graph')
plt.show()
вывод:
Комментарии:
1. Спасибо, жесткое кодирование цветов сработало. Я все еще не понимаю, почему он ведет себя так по-разному с этими данными по сравнению с другими графиками, которые у меня есть, особенно когда дело доходит до даты, но, по крайней мере, с помощью этого обходного пути я могу добиться успеха!
2. И чтобы получить цвета sns по умолчанию:
palette=sns.color_palette()[0:3]