咨询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
相关产品推荐
相关产品推荐

