distplot
в Seaborn дает приблизительную плотность вашего набора данных, используя kde
(оценка плотности ядра) , которая предполагает небольшие «микроядра» вокруг точек данных и добавляет их, чтобы создать «макрос ядра» в целом. Следовательно, ядро вокруг min
и max
определенно пересекает предел, потому что точки данных на границе (min
и max
) являются центром "микроядер". (Примечание: термин «микро / макроядра» - это то, что я просто придумал для объяснения здесь.)
Предположим, у нас есть данные в диапазоне от -10
до 10
, как показано ниже.
import numpy as np
import pandas as pd
df = pd.DataFrame().assign(a=np.random.randint(-10, 11, 100))
print(df.a.min(), df.a.max())
Out:
-10 10
Если мы рисуем distplot
с настройками по умолчанию (где kde
равно True
),
import seaborn as sns
sns.distplot(df.a)
Показывает как histogram
, который ограничен между -10
и 10
, а также kde
, который является приближением этой гистограммы, оба показаны (и, конечно, kde
пересекает min
и max
ограничение по вышеуказанной причине).
![](https://i.stack.imgur.com/iC5fx.png)
Теперь, если вы хотите получить совокупную плотность, то distplot
рассчитывает ее на основе kde
, как показано ниже:
sns.distplot(df.a, kde_kws={'cumulative': True})
![](https://i.stack.imgur.com/OLZDp.png)
На этом этапе обратите внимание, что оба хвоста kde
(синяя линия) на 1-м графике и cumulative kde
(синяя линия) на 2-м графике соответствуют.
Вы можете задаться вопросом, точно ли соответствуют хвосты или нет, так как шкалы y отличаются между 1-м и 2-м графиками, поэтому, если мы увеличим ось Y 2-го графика, это будет выглядеть ниже.
import matplotlib.pyplot as plt
sns.distplot(df.a, kde_kws={'cumulative': True})
plt.ylim([0, 0.07])
![enter image description here](https://i.stack.imgur.com/OJ5wZ.png)
Теперь 1-й и 3-й графики выглядят одинаково, но разница только в том, что 1-й график равен kde
, а 3-й график - cumulative kde
.
Короче говоря, вы составляли "приблизительную совокупную плотность" на основе kde
. Вот почему это более широкое распределение (и совокупное распределение), чем ваши фактические данные (гистограмма).
Надеюсь, это поможет.
РЕДАКТИРОВАТЬ: Добавлено cumulative kde
против cumulative hist
sns.distplot(df.a,
hist_kws={'cumulative': True},
kde_kws={'cumulative': True, 'linestyle':'-.'},
bins=100)
![enter image description here](https://i.stack.imgur.com/lKEXZ.png)