Как правильно построить легенду о многослойном сюжете (boxplot и lineplot)? - PullRequest
0 голосов
/ 01 апреля 2020
import numpy as np
import seaborn as sns
from matplotlib.patches import Patch
from matplotlib.lines import Line2D

data_box = np.random.random((10, 3))
data_line = np.random.random(3)

ax = sns.boxplot(data=data_box, color='red', saturation=0.5)
sns.lineplot(data=data_line, color='blue')
legend_elements = [Line2D([0], [0], color='blue', lw=4, label='box'),
                   Patch(facecolor='red', edgecolor='grey', linewidth=1.5,
                         label='line')]
ax.legend(handles=legend_elements, fontsize='xx-large')

sample plot

Я накладываю линейный график на блок-бокс, как показано на рисунке выше, и рисую легенду вручную, используя matplotlib.

Но seaborn устанавливает насыщенность цветов, значение по умолчанию которых составляет 0,75 (я установил его на 0,5, чтобы сделать разницу понятной). Таким образом, цвет легенды, сгенерированный matplotlib, не точен. Есть ли способ изменить насыщенность легенды matplotlib? Или как точно нарисовать цвет легенды, кроме настройки saturation=1.

1 Ответ

0 голосов
/ 01 апреля 2020

Использование функция Seaborn's desaturate

import numpy as np
import seaborn as sns
from matplotlib.patches import Patch
from matplotlib.lines import Line2D

data_box = np.random.random((10, 3))
data_line = np.random.random(3)

fig, ax = plt.subplots()
ax = sns.boxplot(data=data_box, color='red', saturation=0.5)
sns.lineplot(data=data_line, color='blue')
legend_elements = [Line2D([0], [0], color='blue', lw=4, label='box'),
                   Patch(facecolor=sns.desaturate('red',0.5), edgecolor='grey', linewidth=1.5,
                         label='line')]
ax.legend(handles=legend_elements, fontsize='xx-large')

enter image description here

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