Как правильно построить нормализованную гистограмму с помощью pdf, используя matplotlib? - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь построить нормализованную гистограмму, используя пример из numpy.random.normal документации .Для этого я генерирую нормально распределенную случайную выборку.

mu_true = 0
sigma_true = 0.1 
s = np.random.normal(mu_true, sigma_true, 2000)

Затем я подгоняю нормальное распределение к данным и вычисляю pdf.

mu, sigma = stats.norm.fit(s)
points = np.linspace(stats.norm.ppf(0.01,loc=mu,scale=sigma),
                 stats.norm.ppf(0.9999,loc=mu,scale=sigma),100)
pdf = stats.norm.pdf(points,loc=mu,scale=sigma)

Отображение встроенной гистограммы pdf и данных.

plt.hist(s, 30, density=True);
plt.plot(points, pdf, color='r')
plt.show() 

Я использую density=True, но очевидно, что pdf и гистограмма не нормализованы.

enter image description here

Что можно предложить для построения действительно нормализованной гистограммы и pdf?

Seaborn distplot также не решает проблему.

import seaborn as sns
ax = sns.distplot(s)

enter image description here

1 Ответ

0 голосов
/ 20 сентября 2018

Что заставляет вас думать, что это не нормализовано?В предположении, это, вероятно, потому, что высоты каждого столбца простираются до значений больше 1. Однако это мышление ошибочно, потому что в нормализованной гистограмме / pdf общая площадь под ним должна составлять один (не высоты).Когда вы имеете дело с небольшими шагами в x (такими, как вы), которые меньше единицы, то неудивительно, что высоты столбцов больше единицы!

Вы можете ясно увидеть это на примере scipyВы связываете: значения х намного больше (на порядок), поэтому из них следует, что их значения у также меньше.Вы увидите тот же эффект, если вы измените свое распределение, чтобы охватить более широкий диапазон значений.Попробуйте сигму 10 вместо 0,1, посмотрите, что получится!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...