在Seaborn绘图/直方图函数中绘制高斯拟合直方图NOT distplot

问题描述

我已决定试用Seaborn版本0.11.0!据我所知,正在使用displot函数代替distplot。我只是想弄清楚如何在直方图上绘制高斯拟合。这是一些示例代码

import seaborn as sns
import numpy as np
x = np.random.normal(size=500) * 0.1

使用distplot我可以做到:

sns.distplot(x,kde=False,fit=norm)

enter image description here

但是如何在displot或histplot中处理呢?

解决方法

对不起,我参加聚会迟到了。只需检查这是否满足您的要求。

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

data = np.random.normal(size=500) * 0.1
mu,std = norm.fit(data)

# Plot the histogram.
plt.hist(data,bins=25,density=True,alpha=0.6,color='g')

# Plot the PDF.
xmin,xmax = plt.xlim()
x = np.linspace(xmin,xmax,100)
p = norm.pdf(x,mu,std)
plt.plot(x,p,'k',linewidth=2)
plt.show()

enter image description here

,

到目前为止,我最接近的是:

sns.histplot(x,stat="probability",bins=30,kde=True,kde_kws={"bw_adjust":3})

但是我认为这只会增加绘制的kde的平滑度,这与我要使用的不完全相同:'(

,

我也很想念 fit 参数。当他们弃用 distplot 函数时,他们似乎没有替换该功能。在他们堵上那个洞之前,我创建了一个简短的函数来将正态分布叠加层添加到我的 histplot。我只是将函数与导入一起粘贴到文件顶部,然后我只需要添加一行即可在需要时添加叠加层。

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
from scipy import stats

def normal(mean,std,color="black"):
    x = np.linspace(mean-4*std,mean+4*std,200)
    p = stats.norm.pdf(x,mean,std)
    z = plt.plot(x,color,linewidth=2)

data = np.random.normal(size=500) * 0.1    
ax = sns.histplot(x=data,stat="density")
normal(data.mean(),data.std())

enter image description here