Ответ 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.