回答问题

我想使用 sns.jointplot 在存在两个组的情况下可视化 X 和 Y 之间的关联。然而,在

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

在此处输入图像描述

没有“色调”选项,如 sns.scatterplot 等其他 sns 图。如何在散点图中以及两个重叠的密度图中为不同的组(例如hueu003d"smoker")分配不同的颜色。

在 R 中,这可以通过创建具有两个边缘密度图的散点图来完成,如此处所示所示。 在此处输入图像描述

sns中的等价物是什么?如果这在 sns 中是不可能的,是否有另一个可以用于此的 python 包?

Answers

jointplotsns.JointGrid的简单包装器。如果您创建一个JointGrid对象并手动添加绘图,您将对各个绘图有更多的控制。

在这种情况下,您想要的jointplot只是一个scatterplotkdeplot的组合,而您要做的是将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)

在此处输入图像描述

Logo

Python社区为您提供最前沿的新闻资讯和知识内容

更多推荐