Как выбрать бункеры в гистограмме matplotlib

Может кто-нибудь объяснить мне, что такое "бункеры" в гистограмме (функция matplotlib.pyplot.hist и numpy.histogram, но я не понял эту идею)

Ответы

Ответ 1

Параметр bins указывает количество ящиков, в которые будут разбиты ваши данные. Вы можете указать его как целое число или как список краев бункера.

Например, здесь мы запрашиваем 20 ящиков:

import numpy as np
import matplotlib.pyplot as plt

x = np.random.randn(1000)
plt.hist(x, bins=20)

введите описание изображения здесь

И здесь мы просим края бинов в местах [-4, -3, -2... 3, 4].

plt.hist(x, bins=range(-4, 5))

введите описание изображения здесь

Ваш вопрос о том, как выбрать "лучшее" количество ящиков, является интересным, и на самом деле существует довольно обширная литература по этому вопросу. Существуют некоторые широко используемые правила, которые были предложены (например, правило Freedman-Diaconis, "Правило Стурджеса" , "Скотт Правило" , "Правило квадратного корня" и т.д.), каждый из которых имеет свои сильные и слабые стороны.

Если вам нужна хорошая реализация Python из множества этих правил автонастройки гистограммы, вы можете проверить функциональность гистограммы в последней версии пакета AstroPy, описано здесь. Это работает так же, как plt.hist, но позволяет использовать синтаксис, например, hist(x, bins='freedman') для выбора бункеров через правило Фридмана-Диакони, упомянутое выше.

Мой личный фаворит - "Байесовские блоки" (bins="blocks"), который решает для оптимального биннинга с неравной шириной бина. Вы можете прочитать немного больше о здесь.


Изменить, апрель 2017: с matplotlib версии 2.0 или новее и numpy версии 1.11 или новее, теперь вы можете указать автоматически определенные ячейки непосредственно в matplotlib, указав, например. bins='auto'. Это использует максимум выборки Стурджа и Фридмана-Диакониса. Подробнее о параметрах можно узнать в numpy.histogram docs.

Ответ 2

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

Ответ 3

Вы правы в ожидании того, что количество бункеров оказывает значительное влияние на приближение истинного базового распределения. Я сам не читал оригинальную бумагу, но согласно Scott 1979, следует использовать хорошее эмпирическое правило:

Р (п ^ (1/3))/(3.49σ)

где

  • R - диапазон данных (в вашем случае R = 3 - (- 3) = 6),

  • n - количество выборок,

  • σ - ваше стандартное отклонение.

Ответ 4

Чтобы дополнить ответ numpy.histogram_bin_edges, вы можете использовать numpy.histogram_bin_edges если вы просто хотите вычислить оптимальные ребра бина, фактически не делая гистограмму. histogram_bin_edges - это функция, специально разработанная для оптимального расчета ребер бина. Вы можете выбрать семь разных алгоритмов для оптимизации.