Цветовое кодирование группы совместных участков Seaborn (для диаграмм рассеяния и плотности) - PullRequest
4 голосов
/ 25 апреля 2019

Я хотел бы использовать sns.jointplot для визуализации связи между X и Y при наличии двух групп.Однако в

tips = sns.load_dataset("tips")
sns.jointplot("total_bill", "tip", data=tips) 

enter image description here

отсутствует опция «Оттенок», как на других графиках sns, таких как sns.scatterplot.Как можно назначить разные цвета для разных групп (например, hue = "smoker") как на диаграмме рассеяния, так и на двух перекрывающихся диаграммах плотности.

В R это можно сделать, создав диаграмму рассеяния сдва предельных графика плотности, как показано в здесь .enter image description here

Что такое эквивалент в sns?Если это невозможно в sns, есть ли другой пакет python, который можно использовать для этого?

1 Ответ

4 голосов
/ 25 апреля 2019

jointplot - простая оболочка вокруг sns.JointGrid.Если вы создадите объект JointGrid и добавите к нему участки вручную, у вас будет гораздо больший контроль над отдельными участками.

В этом случае желаемое jointplot - это просто scatterplot в сочетании с kdeplot, и вы хотите передать hue='smoker' (например) на scatterplot.

kdeplot более сложный;seaborn на самом деле не поддерживает один KDE для каждого класса, AFAIK, поэтому я был вынужден построить их индивидуально (вы можете использовать цикл for с большим количеством классов).

Соответственно, вы можете сделать это:

import seaborn as sns

tips = sns.load_dataset('tips')
grid = sns.JointGrid(x='total_bill', y='tip', data=tips)

g = grid.plot_joint(sns.scatterplot, hue='smoker', data=tips)
sns.kdeplot(tips.loc[tips['smoker']=='Yes', 'total_bill'], ax=g.ax_marg_x, legend=False)
sns.kdeplot(tips.loc[tips['smoker']=='No', 'total_bill'], ax=g.ax_marg_x, legend=False)
sns.kdeplot(tips.loc[tips['smoker']=='Yes', 'tip'], ax=g.ax_marg_y, vertical=True, legend=False)
sns.kdeplot(tips.loc[tips['smoker']=='No', 'tip'], ax=g.ax_marg_y, vertical=True, legend=False)

enter image description here

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