2017-08-28 287 views
1

假设我们有一个数字0和1之间的一个数组:限制在seaborn x的范围distplot KDE估计

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有效的关键字。

回答

1

这样做的正确方法,是使用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)) 
+0

D这实际上是重新计算kde还是只切断范围之外的部分? – Peaceful