python pandas dataframe KDEplot 密度水平着色问题

python pandas dataframe KDEplot density levels coloring issue

我有一个 pandas df,我想创建一个 KDE 图。一开始我打电话的时候

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

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

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

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

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

这显然是错误的。有谁知道这里到底发生了什么?

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

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

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

那么现在 - 我应该如何选择最大等值线的最大值? density_levels 包含我要设置边界的百分位数。

好的我找到了,张贴答案给后代:
seaborn 的 kdeplot() 似乎利用了 matplotlib 的 contourf(),正如人们在文档中看到的那样,它填充了指定范围 [min,max] 之间的区域,所以我错过了密度的上限,以开始于.
其次,根据提供的上限调整颜色。这是因为 kdeplot() 默认采用颜色映射,并相应地将 [min,max] 范围拉伸到颜色 space 上。如果最大值远离等值线的其余部分,则会得到一个强烈的中心,周围有非常模糊的区域。
解决方案是使用 "colors" 参数手动提供颜色并关闭颜色映射:

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

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

案件结案,Watson。