Настройте легенду оттенка морского окуня для коробчатого сюжета - PullRequest
1 голос
/ 19 июня 2020

Когда я попытался построить эту диаграмму, легенда возрастной группы была показана ниже.

%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
plt.figure(figsize=(14,7))
sns.set(style="white", palette="Blues", color_codes=True)
f = sns.boxplot(x="RIAGENDRtxt", y="BPXSY1", hue="agegrp", data=df)

plt.savefig("out.png",pad_inches=0.5)
plt.show()

figure without customise legend

Но когда я попытался настроить легенду, мой код

plt.figure(figsize=(14,7))
sns.set(style="white", palette="Blues", color_codes=True)
f = sns.boxplot(x="RIAGENDRtxt", y="BPXSY1", hue="agegrp", data=df)

f.set_xlabel("Sex")
f.set_ylabel("Systolic Blood Pressure")

legend_label = ["(18, 30)", "(30, 40)", "(40, 50)", "(50, 60)", "(60, 70)", "(70, 80)"]
f.legend(title="Age Group", labels=legend_label)

plt.savefig("out.png",pad_inches=0.5)
plt.show()

Эта строка f.legend(title="Age Group", labels=legend_label) могла настраивать заголовок и метки, но это вызывало ошибки в маркерах. Мне нужно установить маркеры в цветовую палитру, как это было на предыдущем рисунке.

figure with plt.legend

Ответы [ 2 ]

1 голос
/ 19 июня 2020

Начиная с версии seaborn 0.10.1, метка легенды хранится в ax.legend_.texts[0], где ax - это matplotlib Axes, возвращаемое sns.boxplot(). Это означает, что вы можете редактировать метку легенды, не меняя ничего другого в легенде, как показано ниже.

g = sns.boxplot(...)
new_legend_label = 'Age Group'
g.legend_.texts[0].set_text(new_legend_label)

В зависимости от того, какую версию seaborn вы используете, метод может быть другим. См. Эти ответы от 2017 и 2019 , где синтаксис немного отличается от старых версий.

0 голосов
/ 19 июня 2020

Спасибо Эмерсон Харкин . Ваше решение было полезным. Я просто просматриваю список ярлыков, чтобы обновить все. Вот мой обновленный код и цифра:

%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
plt.figure(figsize=(14,7))
sns.set(style="white", palette="Blues", color_codes=True)
f = sns.boxplot(x="RIAGENDRtxt", y="BPXSY1", hue="agegrp", data=df)

f.set_xlabel("Sex")
f.set_ylabel("Systolic Blood Pressure")

legend_label = ["(18, 30)", "(30, 40)", "(40, 50)", "(50, 60)", "(60, 70)", "(70, 80)"]
f.legend(title="Age Group")

n = 0
for i in legend_label:
    f.legend_.texts[n].set_text(i)
    n += 1

plt.show()

Updated Figue Обновленная цифра

...