Документация для hist
гласит, что когда вы указываете разрывы как одно число (как вы сделали), тогда
номер только предложение; поскольку точки останова будут установлены на
красивые значения
Если перейти по ссылке на документацию для pretty
, там написано
Значения выбираются таким образом, чтобы они в 1, 2 или 5 раз превышали степень 10.
Вы не можете разделить разрыв между 10 и 35 в 4 равномерно распределенных кратных 1,2, 5 или 10, поэтому он выбрал 5 бинов (6 точек останова). Если вы действительно хотите четыре равномерно распределенных корзины, вы можете использовать
hist(mtcars$mpg, seq(10,35, length.out=5))

Обратите внимание, что вам нужно использовать length.out = 5, чтобы получить четыре ячейки (четыре начальные точки плюс одна дополнительная конечная точка). Конечно, это не дает «симпатичных» значений.
Если вам не нравится, что отметки на оси x не совпадают с ячейками, (я так не делаю), вы можете опустить оси в hist
и добавить их самостоятельно.
H = hist(mtcars$mpg, seq(10,35, length.out=5), axes=FALSE, ylim=c(0,14))
axis(side=1, at=seq(10,35, length.out=5))
axis(side=2, pretty(0:14))

Дальнейшее объяснение breaks
В документации ?hist
говорится, что в перерывах существует 5 типов значений, которые можно использовать для перерывов. Тот, который вы используете:
одно число, дающее количество ячеек для гистограммы
НО, как отмечено выше, документация добавляет:
номер только предложение; точки останова будут установлены в симпатичные значения.
Поэтому, когда вы даете hist
аргумент breaks=4
, он знает, что вы хотите 4 бина, но он также будет настаивать на использовании "симпатичных" значений для границ, то есть равномерно распределенных кратных 1,2, 5 раз в десять раз. Также могут быть ограничения на конечных точках.
Давайте рассмотрим, что он делает с вашими данными mtcars $ mpg.
Вы можете получить много информации о том, что делает hist
, сохранив возвращаемое значение. Я также буду подавлять фактическое построение гистограммы, поскольку сейчас меня интересует только значение.
HV = hist(mtcars$mpg, 4, plot=FALSE)
Вы можете распечатать HV и увидеть, что есть много информации
о гистограмме. Все, что нас волнует, хранится в breaks
.
HV$breaks
[1] 10 15 20 25 30 35
Это дает 6 граничных значений для бинов (необходимо 5 бинов
6 граничных значений). Но мы попросили 4 контейнера, а не 5! Если вы разделите
диапазон 10-35 на четыре корзины вы получаете границы
10, 16,25, 22,5, 28,75 и 35. Это не «красивые» граничные значения.
Вместо этого hist
использует функцию pretty
, чтобы найти более хорошие значения для границ, но это означает, что он должен отказаться от использования 4 корзин.
Сколько точек останова мы получаем для диапазона значений разрывов?
Давайте попробуем 2 перерыва до 20 перерывов.
sapply(2:20, function(n)
length(hist(mtcars$mpg, n, plot=FALSE)$breaks))
[1] 4 4 6 6 6 6 6 13 13 13 13 13 13 13 13 25 25 25 25
Примечание еще раз: 4 точки останова означают 3 корзины.
6 точек останова означают 5 корзин. Есть только четыре разных
расщепления, которые созданы. Что они?
unique(lapply(2:20, function(n) hist(mtcars$mpg, n, plot=FALSE)$breaks))
[[1]]
[1] 10 20 30 40
[[2]]
[1] 10 15 20 25 30 35
[[3]]
[1] 10 12 14 16 18 20 22 24 26 28 30 32 34
[[4]]
[1] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
Границы меняются на 10, 5, 2 или 1 - довольно границы.
Если вы хотите иметь больше контроля, вы должны быть в состоянии указать
где вы хотите границы. Это то, что я сделал в примере выше. Еще одна опция для указания breaks
:
вектор, задающий контрольные точки между ячейками гистограммы
Это то, что я использовал, когда указал seq(10,35, length.out=5)
.
Но обратите внимание на значения:
seq(10,35, length.out=5)
[1] 10.00 16.25 22.50 28.75 35.00
Не красиво.
Так что вы можете сделать это легко и красиво, но без хорошего контроля
над количеством бункеров ИЛИ вы можете контролировать количество
бункеров за счет большего количества работы и более уродливых границ.