【问题标题】:python pandas dataframe KDEplot density levels coloring issuepython pandas dataframe KDEplot密度级别着色问题
【发布时间】:2019-01-15 13:00:27
【问题描述】:

我有一个 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 包含百分位数,我想在该处建立边界。

【问题讨论】:

    标签: python pandas dataframe seaborn kernel-density


    【解决方案1】:

    好的,我找到了,为后代发布答案:
    似乎 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))
    

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

    案件结案,华生。

    【讨论】:

      猜你喜欢
      • 2021-05-20
      • 2017-07-03
      • 1970-01-01
      • 2017-12-27
      • 1970-01-01
      • 2022-08-05
      • 1970-01-01
      • 1970-01-01
      • 2017-06-08
      相关资源
      最近更新 更多