Я хотел бы иметь параметр весов в distplot seaborn, аналогичный тому, что в гистограмме numpy. Без этой опции единственной альтернативой было бы применение взвешивания к входному массиву, что могло бы привести к непрактичному размеру (и времени).
вариант весов для морской дистрибуции?
Ответы (2)
Вы можете указать веса, передав их в базовую функцию гистограммы matplotlib, используя аргумент hist_kws
, как:
sns.distplot(..., hist_kws={'weights': your weights array}, ...)
Однако обратите внимание, что веса будут передаваться только в основную гистограмму; ни kde, ни функции соответствия distplot
не будут затронуты.
Как уже упоминал @vlasisla в своем ответе, веса должны быть предоставлены через аргумент ключевого слова hist_kws
, чтобы они передавались в функцию hist
mathpolotlib. Однако это не даст никакого эффекта, если одновременно не будет отключена опция kde
(оценка плотности ядра). Этот код действительно имел бы желаемый эффект:
sns.distplot(x, hist_kws={'weights': x_weights}, kde=False)
Чтобы понять, почему и веса, и kde недопустимы, давайте рассмотрим следующий пример, где x_weights
вычисляется как x_weights = np.ones_like(x) / len(x)
, так что сумма высоты всех интервалов равна 1:
# generate 1000 samples from a normal distribution
np.random.seed(8362)
x = np.random.normal(size=1000)
# calculate weights
x_weights = np.ones_like(x) / len(x)
# figure 1 - use weights
sns.distplot(x, hist_kws={'weights': x_weights}, kde=False)
# figure 2 - default plot with kde
sns.distplot(x)
Рис. 1. Использование dist с весами, а не KDE Рисунок 2. Использование dist с параметрами по умолчанию
На рисунке 1 мы предоставили функцию dist
с весами, поэтому на этом рисунке высота всех ящиков в сумме равна 1. На рис. 2 поведение dist
по умолчанию включено, поэтому область под функцией KDE в сумме равна 1, а высота ячеек нормализована соответственно. Теперь легко увидеть, что построение графика KDE, когда указаны веса, действительно не имеет большого смысла.