python pandas dataframe KDEplot密度级别着色问题

时间:2018-08-08 09:52:35

标签: python pandas dataframe seaborn kernel-density

我有一个熊猫df,我想创建一个KDE图。一开始我打电话

.up

enter image description here

没关系,正如我们所见,数据被分散到4个2D群集中。常规的KDE图确认了这一点:

g = sns.jointplot("s_zscore","p_zscore",s=2, data=scatter_all, kind="scatter")

enter image description here

但是现在当我提供自己的密度水平时,发生了奇怪的事情-由于某种原因,在密度最高的子空间中,我得到了一个白色圆圈:

g = sns.jointplot("s_zscore","p_zscore",s=2, data=scatter_all, kind="kde")

enter image description here

这显然是错误的。有人知道这里发生了什么吗?

=====================================
编辑:
好的,我认为这与我提供的级别有关:

g = sns.jointplot("s_zscore","p_zscore",s=2, data=scatter_all, kind="kde",levels=density_levels)

enter image description here

g = sns.jointplot("s_zscore","p_zscore",s=2, data=scatter_all, kind="kde",levels=density_levels+[0.03])

enter image description here

那么现在-如何为最大等值线选择最大值? density_levels包含要在其上形成边界的百分位数。

1 个答案:

答案 0 :(得分:0)

好吧,我找到了答案,为后代发布了答案:
似乎seaborn的kdeplot()使用的是matplotlib的contourf(),正如在文档中可以看到的那样,它填充了指定范围[min,max]之间的区域,因此我错过了密度的上限,开始。
其次,根据提供的上限调整颜色。这是因为kdeplot()默认情况下采用颜色图,并相应地将[min,max]范围扩展到颜色空间。如果最大值与其余等值线相距较远,则将获得一个密集的中心,周围有非常模糊的区域。
解决方案是使用“ colors”参数手动提供颜色并关闭颜色图:

fifty_shades_of_grey = ["#f3f3f3","#e6e6e6","#d9d9d9","#cccccc","#bfbfbf"]
sns.palplot(sns.color_palette(fifty_shades_of_grey))

enter image description here

g = sns.jointplot("s_zscore","p_zscore", data=scatter_all, kind="kde",levels=density_levels+[1],colors=fifty_shades_of_grey,cmap=None)

enter image description here

案例关闭,沃森。