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

时间:2017-08-28 04:10:56

标签: python seaborn kernel-density

假设我们有一个数字介于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)

这将给我们提供下图: enter image description here

如您所见,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的有效关键字。

2 个答案:

答案 0 :(得分:4)

正确的方法是使用clip关键字代替range

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

将产生: enter image description here

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

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

答案 1 :(得分:1)

Settins plt.xlim(0, 1)应该会有所帮助:

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