Частоты значений в гистограмме - PullRequest
0 голосов
/ 17 апреля 2020

Это мой первый пост, поэтому, пожалуйста, потерпите меня

Вот код

plt.figure()
ax1 = plt.subplot()
sample = np.random.normal(loc=0.0, scale=1.0, size=100)
ax1.hist(sample,bins=100)
ax1.set_title('n={}'.format(sample_size))  
print(len(np.unique(sample))) ##outputs 100 as expected

Я сомневаюсь, что я даю bins=100, и количество образцов также 100, так почему же он не отображает столбцы для каждой отдельной выборки и почему выходной график содержит частоты больше 1?

1 Ответ

0 голосов
/ 17 апреля 2020

При использовании параметров по умолчанию все ячейки имеют одинаковую ширину. 100 бинов означает, что ширина каждого бункера составляет 1/100 от общей ширины. Общая ширина изменяется от наименьшего к наибольшему в списке выборок.

Из-за выбора границ, по крайней мере, одна точка окажется в первом бине, одна - в последнем, но большинство закончится. вверх в центральных контейнерах, и многие из самых внешних контейнеров остаются пустыми.

Часто желательно иметь все контейнеры одинаковой ширины. Гистограмма хочет показать, в каком регионе больше и где меньше образцов, есть ли один пик или несколько пиков. Как правило, чтобы передать интересную информацию о данных, количество бинов должно быть намного меньше количества выборок.

Вот график, иллюстрирующий происходящее. Поскольку 100 ячеек создают очень многолюдный график, в примере используются только 20 образцов и 20 ячеек. С таким количеством сэмплов они будут распределены немного больше, чем с большим количеством сэмплов. hist возвращает 3 массива: один с содержимым каждого бина, один с границами между бинами (это на один больше, чем количество бинов) и один с графическими объектами (прямоугольные angular патчи). Границы могут использоваться, чтобы показать их положение.

import matplotlib.pyplot as plt
import numpy as np

N = 20
plt.figure()
ax1 = plt.subplot()
sample = np.random.normal(loc=0.0, scale=1.0, size=N)
bin_values, bin_bounds, _ =  ax1.hist(sample, bins=N, label='Histogram')
ax1.set_title(f'{len(np.unique(sample))} samples')
ax1.plot(np.repeat(bin_bounds, 3), np.tile([0, -1, np.nan], len(bin_bounds)), label='Bin boundaries' )
ax1.scatter(sample, np.full_like(sample, -0.5), facecolor='none', edgecolor='crimson', label='Sample values')
ax1.axhline(0, color='black')
plt.legend()
plt.show()

explanatory plot

Вот как выглядит 100 выборок и 100 бинов:

plot with 100 bins

...