Seaborn Multiaxis Graph, назначая разные цвета одной и той же / общей категории Hue - PullRequest
1 голос
/ 10 апреля 2019

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

   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()

Graph

Я даже установил одну и ту же категорию Y, и даже тогда цвета разные.Если я изменю цветовую палитру, цвета по-прежнему будут разными, просто разные оттенки палитры.

ПОЧЕМУ это происходит?Категории являются общими, поэтому они должны вести себя одинаково.Почему это происходит?

1 Ответ

1 голос
/ 10 апреля 2019

Полагаю, это потому, что 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()

выход:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...