You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询Seaborn中KDE绘图提取的x值先增后减的原因

关于KDE图提取x值先增后减的原因及解决办法

原因

当你用fill=True绘制KDE图时,seaborn会生成一个闭合的多边形路径来填充曲线下方的区域。这个路径的绘制逻辑很直接:从x的最小值开始,沿着KDE曲线的顶点向右(x递增)走到x的最大值,然后从x最大值处沿着y=0的水平线向左(x递减)回到x最小值,形成闭合图形才能完成填充。所以你提取的vertices数组里包含两部分点:前半段是KDE曲线上的有效点(x递增),后半段是用于闭合图形的底部回退点(x递减),这就导致x_values整体呈现先增后减的规律。

解决办法

这里提供几种实用的处理方式:

  • 从填充多边形中提取有效点
    找到x值最大的位置,取该位置之前的点就是KDE曲线的有效数据:

    vertices = poly.get_paths()[0].vertices
    max_x_idx = vertices[:, 0].argmax()
    kde_x = vertices[:max_x_idx + 1, 0]
    kde_y = vertices[:max_x_idx + 1, 1]
    
  • 直接从KDE线条对象提取(更简单)
    带填充的KDE图其实也包含一条独立的曲线线条,直接从这里提取的x值是严格递增的:

    kde_line = kde.lines[0]
    kde_x = kde_line.get_xdata()
    kde_y = kde_line.get_ydata()
    
  • 手动计算KDE数值(最灵活)
    用scipy直接计算KDE,完全自主控制x的范围和精度:

    from scipy.stats import gaussian_kde
    import numpy as np
    
    kde_model = gaussian_kde(data)
    x = np.linspace(data.min(), data.max(), 1000)  # 可自定义点数
    y = kde_model(x)
    

内容的提问来源于stack exchange,提问作者user

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 06:22:22