Seaborn联合图中的组颜色编码(适用于散点图和密度图)

9
我想使用sns.jointplot来可视化X和Y之间在两个组存在的关联。然而,在...
tips = sns.load_dataset("tips")
sns.jointplot("total_bill", "tip", data=tips) 

enter image description here

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

在R中,可以通过创建一个带有两个边际密度图的散点图来完成,如此处所示。 enter image description here

sns中的等效方法是什么? 如果在sns中不可能实现这一点,是否有另一个可用于此目的的Python软件包?


一些相关链接 - ImportanceOfBeingErnest
谢谢。我看到了第一个和最后一个问题,但第二个问题在我的搜索中没有出现。 - user1442363
1个回答

17

jointplot是围绕着sns.JointGrid创建的一个简单包装器。如果您手动创建一个JointGrid对象并添加图形,您将对各个图形拥有更多的控制权。

在这种情况下,您希望创建的jointplot实际上是scatterplotkdeplot组合而成的,您想要做的就是将hue='smoker'(例如)传递给scatterplot

kdeplot更加复杂;据我所知,seaborn不支持每个类别一个KDE,因此我被迫单独绘制它们(您可以使用一个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


2
截至回答时,在sns.jointplot中可能不支持此功能,但在0.11.1版本中,使用“hue”参数本地支持此功能。 http://seaborn.pydata.org/generated/seaborn.jointplot.html - Bow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接