限制 seaborn distplot KDE 估计中 x 的范围

Limit the range of x in seaborn distplot KDE estimation

假设我们有一个数组,其中的数字介于 0 和 1 之间:

arr=np.array([ 0.        ,  0.        ,  0.        ,  0.        ,  0.6934264 ,
               0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
               0.        ,  0.        ,  0.6934264 ,  0.        ,  0.6934264 ,
               0.        ,  0.        ,  0.        ,  0.        ,  0.251463  ,
               0.        ,  0.        ,  0.        ,  0.87104906,  0.251463  ,
               0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
               0.        ,  0.        ,  0.        ,  0.        ,  0.48419626,
               0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
               0.87104906,  0.        ,  0.        ,  0.251463  ,  0.48419626,
               0.        ,  0.251463  ,  0.        ,  0.        ,  0.        ,
               0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
               0.        ,  0.251463  ,  0.        ,  0.35524532,  0.        ,
               0.        ,  0.        ,  0.        ,  0.        ,  0.251463  ,
               0.251463  ,  0.        ,  0.74209813,  0.        ,  0.        ])

使用seaborn,我想绘制分布图:

sns.distplot(arr, hist=False)

这会给我们下图:

如您所见,kde 估计范围在 -0.20 到 1.10 附近。是否可以强制估计值介于 0 和 1 之间?我尝试了以下方法但没有成功:

sns.distplot(arr, hist=False, hist_kws={'range': (0.0, 1.0)})
sns.distplot(arr, hist=False, kde_kws={'range': (0.0, 1.0)})

第二行引发异常 -- range 不是 kde_kws 的有效关键字。

正确的做法是使用 clip 关键字而不是 range:

sns.distplot(arr, hist=False, kde_kws={'clip': (0.0, 1.0)})

这将产生:

的确,如果你只关心kde而不关心直方图,你可以使用kdeplot函数,它会产生相同的结果:

sns.kdeplot(arr, clip=(0.0, 1.0))

事先设置 plt.xlim(0, 1) 应该会有帮助:

plt.xlim(0, 1)
sns.distplot(arr, hist=False)