Для дискретных данных гистограмма используется немного иначе, чем для непрерывных, потому что значения принимаются отдельными уровнями, а не на непрерывном интервале.
Ключевая идея:
один столбец ↔ одно дискретное значение (или узкий интервал вокруг него).
Пример дискретных данных:
import numpy as np
data = np.random.poisson(lam=3, size=1000)Если построить гистограмму «по умолчанию», бины могут выглядеть смазанно. Поэтому бины обычно задают явно.
Правильная настройка бинов:
import matplotlib.pyplot as plt
bins = np.arange(data.min(), data.max() + 2) - 0.5
plt.hist(data, bins=bins, density=True)
plt.show()Что здесь происходит:
– бины центрируются на целых значениях
– каждое целое число получает свой столбец
– гистограмма отражает эмпирическое дискретное распределение
Почему важно смещать бины на 0.5:
Без смещения значения «попадают на границы» интервалов, и столбцы перестают соответствовать конкретным значениям.
Интерпретация:
– высота столбца ≈ вероятность P(X = k)
– сумма площадей столбцов = 1 (при density=True)
– форма отражает эмпирическое распределение Пуассона, биномиального и т.п.
Альтернатива без plt.hist:
Для дискретных данных часто удобнее считать частоты напрямую:
values, counts = np.unique(data, return_counts=True)
probs = counts / counts.sum()
plt.bar(values, probs)
plt.show()Когда что использовать:
– plt.hist с явными бинами → когда хочется унифицированный подход
– plt.bar → когда значения дискретные и их немного
Коротко:
гистограмма для дискретных данных строится с бинами, выровненными по целым значениям, чтобы каждый столбец соответствовал конкретному значению случайной величины.