簡體   English   中英

使用 fit=stats.norm 在 sns.distplot 中將 y 軸更改為百分比

[英]Changing y axis to percentage in sns.distplot with fit=stats.norm

我正在繪制一系列高斯分布,據我了解,y 軸是密度而不是概率。 有沒有辦法將其更改為百分比或概率? 我的代碼如下:

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

x = np.random.normal(size=500) * 0.1
ax = plt.figure()
sns.distplot(x, bins=15, kde =False, fit=norm, color='lightseagreen', fit_kws={"color":"lightseagreen"}, hist_kws=dict(alpha=0.7))

擬合的高斯分布

您可以嘗試手動定義箱,然后 plot 直方圖,這給你計數:

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

x = np.random.normal(size=500) * 0.1

fig, ax = plt.subplots()

nbins = 20
xlen = np.linspace(-0.4,0.4,nbins)
binwidth = xlen[1] - xlen[0]
sns.distplot(x, bins=xlen, kde =False, color='lightseagreen', 
             fit_kws={"color":"lightseagreen"}, hist_kws=dict(alpha=0.7),ax=ax)

在此處輸入圖像描述

然后擬合正態分布,使用 cdf 的差值獲得這些 bin 內的概率,然后按比例縮小 y-ticks:

mu, std = norm.fit(x)
p = np.diff(norm.cdf((xlen-mu)/std))
ax.plot(xlen[:(len(xlen)-1)]+binwidth/2,p*len(x),color='lightseagreen')
ax.set_yticklabels(ax.get_yticks()/len(x))

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM