Размер бункера в Matplotlib (гистограмма)

Я использую matplotlib для создания гистограммы.

В принципе, мне интересно, есть ли способ вручную установить размер бункеров в отличие от количества ящиков.

Приветствуется любой, кто имеет какие-либо идеи.

Спасибо

Ответ 1

На самом деле это довольно просто: вместо количества ящиков вы можете предоставить список с границами бинов. Они также могут быть распределены неравномерно:

plt.hist(data, bins=[0, 10, 20, 30, 40, 50, 100])

Если вы просто хотите, чтобы они были одинаково распределены, вы можете просто использовать диапазон:

plt.hist(data, bins=range(min(data), max(data) + binwidth, binwidth))

Добавлен исходный ответ

Вышеуказанная строка работает только для data, заполненной целыми числами. Как указывает macrocosme, для поплавков вы можете использовать:

import numpy as np
plt.hist(data, bins=np.arange(min(data), max(data) + binwidth, binwidth))

Ответ 2

Для N бинов края бункера задаются списком значений N + 1, где первый N дает нижние края буфера, а +1 дает верхний край последнего бункера.

код:

from numpy import np; from pylab import *

bin_size = 0.1; min_edge = 0; max_edge = 2.5
N = (max_edge-min_edge)/bin_size; Nplus1 = N + 1
bin_list = np.linspace(min_edge, max_edge, Nplus1)

Обратите внимание, что linspace создает массив от min_edge до max_edge, разбитого на N + 1 или N бинов

Ответ 3

Я думаю, что простой способ - рассчитать минимум и максимум данных, которые у вас есть, а затем рассчитать L = max - min. Затем вы разделите L на требуемую ширину бункера (я предполагаю, что это то, что вы подразумеваете под размером бина), и используйте потолок этого значения как количество ящиков.

Ответ 4

У меня была такая же проблема, как OP (я думаю!), но я не мог заставить ее работать так, как указано в Lastalda. Я не знаю, правильно ли я правильно истолковал вопрос, но я нашел другое решение (возможно, это действительно плохой способ сделать это).

Так я и сделал:

plt.hist([1,11,21,31,41], bins=[0,10,20,30,40,50], weights=[10,1,40,33,6]);

Что создает это:

изображение, показывающее график гистограммы, созданный в matplotlib

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

Чтобы продемонстрировать это, посмотрите на массив в первом параметре ([1,11,21,31,41]) и массив "бункеров" во втором параметре ([0,10,20,30,40, 50]):

  • Число 1 (из первого массива) находится между 0 и 10 (в массиве "бит" )
  • Число 11 (из первого массива) находится между 11 и 20 (в массиве "бинов" )
  • Число 21 (из первого массива) находится между 21 и 30 (в массиве "ящиков" ) и т.д.

Затем я использую параметр "вес" для определения размера каждого бункера. Это массив, используемый для параметра веса: [10,1,40,33,6].

Таким образом, в буфере от 0 до 10 задано значение 10, в буфере от 11 до 20 задано значение 1, в ячейке с 21 по 30 задано значение 40 и т.д.

Ответ 5

Для гистограммы с целыми значениями х я закончил использование

plt.hist(data, np.arange(min(data)-0.5, max(data)+0.5))
plt.xticks(range(min(data), max(data)))

Смещение 0,5 центрирует ячейки на значениях по оси x. Вызов plt.xticks добавляет галочку для каждого целого числа.