scipy 如何更改直方图的分布曲线(kde)平滑?

ohfgkhjo  于 7个月前  发布在  其他
关注(0)|答案(2)|浏览(137)

通过下面的代码,我可以用直方图及其核密度估计(kde)来可视化数据。

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

df = pd.read_csv('https://raw.githubusercontent.com/selva86/datasets/master/diamonds.csv')

plt.subplots(figsize=(7,6), dpi=100)
#sns.distplot( df.loc[df.species=='setosa', "sepal_length"] , color="dodgerblue", label="Setosa")
#sns.distplot( df.loc[df.species=='virginica', "sepal_length"] , color="orange", label="virginica")
#sns.distplot( df.loc[df.species=='versicolor', "sepal_length"] , color="deeppink", label="versicolor")

sns.histplot(df.loc[df.cut=='Good', 'depth'], bins= 100, color="blue", label="pcts", kde = True)

plt.title('Iris Histogram')
plt.legend();

生成的图形输出如下所示:

如何调整内核平滑线图,使曲线不那么平滑,但更符合直方图的形状?
结果应该更像这个图中的红色曲线:

或者我只是把事情搞混了,我正在寻找的曲线对应于概率密度函数(pdf)?

wgmfuz8q

wgmfuz8q1#

您可以将sns.kdeplot()关键字作为字典传递给sns.histplot。要更改KDE绘图的平滑度,您需要使用bw_adjust参数。

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

random_data = np.random.normal(0, 0.1, 1000)

fig, ax = plt.subplots(nrows=2)
sns.histplot(random_data, bins=100, kde = True, kde_kws={"bw_adjust":0.25}, ax=ax[0])
sns.histplot(random_data, bins=100, kde = True, kde_kws={"bw_adjust":5}, ax=ax[1])

50few1ms

50few1ms2#

使用kde_kws参数,您可以指定bw_adjust,根据kdeplut文档,它可以调整'bw_method'中设置的方法返回的带宽值。尝试将其设置为例如。0.1通过追加kde_kws={'bw_adjust':0.1},使您的代码变为:
sns.histplot(df.loc[df.cut=='Good', 'depth'], bins= 100, color="blue", label="pcts", kde = True, kde_kws={'bw_adjust':0.1})
如果这还不够,你可能需要调整bw_method

相关问题