Сохраняйте цвета легенды одинаковыми на нескольких участках - PullRequest
0 голосов
/ 20 марта 2020

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

import pandas as pd
import numpy as np

df1 = pd.DataFrame(
    {
        "X": ["A"] * 3 + ["B"] * 5,
        "Y": ["a", "b", "c", "a", "b", "c", "d", "e"],
        "v": np.random.random(8),
    }
).set_index(["X", "Y"])

ax = df1.unstack().loc[:, "v"].plot(kind="bar", stacked=True, figsize=(5, 2))
ax.legend(loc="lower center", bbox_to_anchor=(0.5, -0.55), ncol=5)

df2 = pd.DataFrame(
    {
        "X": ["A"] * 3 + ["B"] * 4,
        "Y": ["a", "b", "c", "a", "b", "c", "e"],
        "v": np.random.random(7),
    }
).set_index(["X", "Y"])
ax = df2.unstack().loc[:, "v"].plot(kind="bar", stacked=True, figsize=(5, 2))
ax.legend(loc="lower center", bbox_to_anchor=(0.5, -.55), ncol=5)

В результате получаются два таких графика:

enter image description here

Как видно, "e "имеет разные цвета на двух участках. Любое предложение, как я могу согласовать цвета на нескольких участках?

1 Ответ

1 голос
/ 20 марта 2020

Используйте диктовку, чтобы сопоставить название каждого Ser ie с цветом. Затем назначьте этот цвет при печати:

import pandas as pd
import seaborn as sns
import numpy as np

df1 = pd.DataFrame(
    {
        "X": ["A"] * 3 + ["B"] * 5,
        "Y": ["a", "b", "c", "a", "b", "c", "d", "e"],
        "v": np.random.random(8),
    }
).set_index(["X", "Y"])
colores = {'a': 'green', 'b': 'red', 'c': 'orange', 'd': 'blue', 'e': 'brown'}
df_plot1 = df1.unstack()["v"]
ax = df_plot1.plot(kind="bar", stacked=True, figsize=(5, 2), color=df_plot1.columns.map(colores))
ax.legend(loc="lower center", bbox_to_anchor=(0.5, -0.55), ncol=5)

df2 = pd.DataFrame(
    {
        "X": ["A"] * 3 + ["B"] * 4,
        "Y": ["a", "b", "c", "a", "b", "c", "e"],
        "v": np.random.random(7),
    }
).set_index(["X", "Y"])

df_plot2 = df2.unstack()["v"]
ax = df_plot2.plot(kind="bar", stacked=True, figsize=(5, 2), color=df_plot2.columns.map(colores))
ax.legend(loc="lower center", bbox_to_anchor=(0.5, -.55), ncol=5)

enter image description here enter image description here

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