限制海洋分布图KDE估计中x的范围

Ash*_*kan 5 python kernel-density seaborn

假设我们有一个数字在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.        ])
Run Code Online (Sandbox Code Playgroud)

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

sns.distplot(arr, hist=False)
Run Code Online (Sandbox Code Playgroud)

这将给我们下图: 在此处输入图片说明

如您所见,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)})
Run Code Online (Sandbox Code Playgroud)

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

Ash*_*kan 7

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

sns.distplot(arr, hist=False, kde_kws={'clip': (0.0, 1.0)})
Run Code Online (Sandbox Code Playgroud)

会产生: 在此处输入图片说明

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

sns.kdeplot(arr, clip=(0.0, 1.0))
Run Code Online (Sandbox Code Playgroud)

  • 这实际上是重新计算kde还是只是切除了超出范围的零件? (4认同)
  • @R.Cox:我认为没有。我尝试使用和不使用裁剪来绘制 kde,它们只是重叠。 (2认同)

R. *_*Cox 6

Settinsplt.xlim(0, 1)事先应该有所帮助:

plt.xlim(0, 1)
sns.distplot(arr, hist=False)
Run Code Online (Sandbox Code Playgroud)