如何解决在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)
但是如何在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()
,
到目前为止,我最接近的是:
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())
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。