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)