【问题标题】:Limit the range of x in seaborn distplot KDE estimation在 seaborn distplot KDE 估计中限制 x 的范围
【发布时间】: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.1 sns.distplot(arr, hist=False) 给了我一个不同的情节:曲线排除了零,就好像它不是 arr 的一部分一样。

标签: python seaborn kernel-density


【解决方案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;你的两条曲线重叠。我将它用于不同的应用程序,在这种情况下它正在改变。我刚刚尝试了问题中的代码,它给了我一个完全不同的图表。在我的电脑上,它现在正在使用更小的垃圾箱!
猜你喜欢
  • 2017-10-12
  • 2016-09-01
  • 2022-08-22
  • 2019-01-17
  • 2020-06-16
  • 2019-08-03
  • 1970-01-01
  • 2015-10-22
  • 2017-08-22
相关资源
最近更新 更多