在 seaborn distplot KDE 估计中限制 x 的范围
Posted
技术标签:
【中文标题】在 seaborn distplot KDE 估计中限制 x 的范围【英文标题】:Limit the range of x in seaborn distplot KDE estimation 【发布时间】:2018-02-05 07:02:04 【问题描述】:假设我们有一个数字介于 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
的有效关键字。
【问题讨论】:
我很困惑,因为 seaborn 0.8.1sns.distplot(arr, hist=False)
给了我一个不同的情节:曲线排除了零,就好像它不是 arr
的一部分一样。
【参考方案1】:
事先设置plt.xlim(0, 1)
应该会有所帮助:
plt.xlim(0, 1)
sns.distplot(arr, hist=False)
【讨论】:
这里的“plt”是什么?是否有隐含的import matplotlib.pyplot as plt
?【参考方案2】:
这样做的正确方法是使用clip
关键字而不是range
:
sns.distplot(arr, hist=False, kde_kws='clip': (0.0, 1.0))
这将产生:
确实,如果你只关心kde而不关心直方图,你可以使用kdeplot
函数,它会产生同样的结果:
sns.kdeplot(arr, clip=(0.0, 1.0))
【讨论】:
这实际上是重新计算kde还是只是切断范围之外的部分? 有没有办法在 KernelDensity.fit() 函数上做到这一点? 它确实会重新计算 kde @Peaceful @R.Cox :我认为不是。我尝试在有和没有剪辑的情况下绘制 kde,它们只是重叠。 你说得对,它不会重新计算 kde;你的两条曲线重叠。我将它用于不同的应用程序,在这种情况下它正在改变。我刚刚尝试了问题中的代码,它给了我一个完全不同的图表。在我的电脑上,它现在正在使用更小的垃圾箱!以上是关于在 seaborn distplot KDE 估计中限制 x 的范围的主要内容,如果未能解决你的问题,请参考以下文章