Как нормализовать гистограмму pyplot?
Хочу построить гистограмму распределения среднего выборки для экспоненциального распределения через pyplot hist.
Параметр density выставил на True. Согласно документации, именно он должен нормализовать гистограмму к 1. Однако, результат мне непонятен:
expon_rv = sts.expon(loc = 0, scale = 1)
sample = expon_rv.rvs(1000)
n2 = 10
sample_2_mean = []
for k in range(1000):
sample_2 = np.random.choice(sample, n2)
sample_2_mean.append(np.mean(sample_2))
plt.hist(sample_2_mean, bins = 20, density = True)
Ответы (2 шт):
Автор решения: MaxU
→ Ссылка
При указании параметра density=True - суммарная площадь прямоугольников будет равна единице. Т.е. вы получаете график плотности вероятностей. Если перемножить высоту на ширину каждого прямоугольника и сложить все полученные площади - мы должны получить 1.0.
Автор решения: strawdog
→ Ссылка
Я так понимаю, товарищу нужно что-то типа этого:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import PercentFormatter
import scipy.stats as sts
expon_rv = sts.expon(loc = 0, scale = 1)
sample = expon_rv.rvs(1000)
n2 = 10
sample_2_mean = []
for k in range(1000):
sample_2 = np.random.choice(sample, n2)
sample_2_mean.append(np.mean(sample_2))
weights = [x/sum(sample_2_mean) for x in sample_2_mean]
plt.hist(sample_2_mean, bins = 20, weights=weights)
plt.gca().yaxis.set_major_formatter(PercentFormatter(1)) #для отображения в процентах, а не в долях
получится:

