sns.distplot 正在为唯一的正变量绘制负值

reb*_*eca 5 plot python-3.x seaborn

您好,我正在尝试使用 sns.distplot 函数在 Python 中绘制变量的分布。

例如,我创建变量 x 作为随机变量,只有正值。

import pandas as pd
x = np.random.random(100)
Run Code Online (Sandbox Code Playgroud)

然后我使用 sns.distplot 函数,我得到下图: 在此处输入图片说明

正如您所看到的,似乎存在负值 (-0.25)。我通过执行以下操作检查是否存在负值:

x < 0
>>> array([False, False, False, False, False, False, False, False, False,
   False, False, False, False, False, False, False, False, False,
   False, False, False, False, False, False, False, False, False,
   False, False, False, False, False, False, False, False, False,
   False, False, False, False, False, False, False, False, False,
   False, False, False, False, False, False, False, False, False,
   False, False, False, False, False, False, False, False, False,
   False, False, False, False, False, False, False, False, False,
   False, False, False, False, False, False, False, False, False,
   False, False, False, False, False, False, False, False, False,
   False, False, False, False, False, False, False, False, False, False],       dtype=bool)
Run Code Online (Sandbox Code Playgroud)

我不明白为什么 x 在图中似乎有负值。有谁知道为什么会这样?我试着看看我是否找到了关于 sns.ditplot 函数的更多规范,但我找不到任何启发我的东西。

谢谢!

Gay*_*tri 9

正如您所看到的,该图只有从零开始的值。如果不想在图中看到负值,可以设置 xlim 参数。

import seaborn as sns
import numpy as np

x = np.random.random(100)
%matplotlib inline
sns.distplot(x).set(xlim=(0))
Run Code Online (Sandbox Code Playgroud)

这使

在此处输入图片说明

  • 知道了。我认为这就是 KDE 的工作方式。即使对于正值,KDE 的结果也可能是负值。检查此链接 https://stats.stackexchange.com/questions/109549/negative-density-for-non-negative-variables。希望这可以帮助。 (3认同)
  • 谢谢加亚特里的回复。我还尝试对 x 轴设置限制,但绘图的形状仍然很奇怪,因为它似乎“隐藏”数据。我的问题更具概念性,因为我不明白为什么它似乎有负面观察,而事实上我知道没有。您知道 sns.distplot 函数是如何构建的以及为什么它显示这样的分布吗? (2认同)