Изменение оси Y в процентах в sns.distplot с помощью fit = stats.norm - PullRequest
0 голосов
/ 26 мая 2020

Я рисую серию гауссовских распределений, и, насколько я понимаю, ось 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))

Gaussian distribution with fit

1 Ответ

0 голосов
/ 26 мая 2020

Вы можете попробовать вручную определить интервалы, а затем построить гистограмму, это даст вам количество:

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)

enter image description here

Затем установите нормальное распределение , получите вероятность внутри этих интервалов, используя разницу cdf, а затем уменьшите масштаб по оси y:

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))

enter image description here

...