#r #ggplot2 #histogram #distribution
#r #ggplot2 #гистограмма #распределение
Вопрос:
У меня есть вектор данных, который может принимать значения от 1 до 100. Когда я строю гистограмму с размером ячейки 10, я бы ожидал 10 ячеек с диапазонами 1-10, 11-20 и т.д. Тем не менее, в итоге я получаю график, который выглядит следующим образом:
Как вы можете видеть, диапазоны внешних ячеек выходят за пределы значений, которые могут принимать мои данные (0 и 100).
Есть ли способ сгенерировать гистограмму так, чтобы в ней было ровно n ячеек между заданным диапазоном?
Ответ №1:
Вы можете использовать привязанную шкалу с помощью geom_bar
ggplot(data.frame(v=sample(1:100, 100, TRUE)), aes(x=v))
geom_bar()
scale_x_binned(n.breaks = 10)
Комментарии:
1. Привет, Рикардо, это больше соответствует тому, что я хотел бы. Есть ли способ сделать это с помощью geom_histogram?
2. В справке R по geom_histogram говорится, что «В дополнение к geom_histogram вы можете создать график гистограммы, используя scale_x_binned() с geom_bar(). Этот метод по умолчанию отображает отметки между каждым столбцом.» Я полагаю, что объединение обоих не было предусмотрено дизайном библиотеки, и результаты не определены.
Ответ №2:
Вы можете делать все, что хотите, с breaks
аргументом к geom_histogram
. Вы можете установить определенные (и произвольные) размеры двоичных файлов, если это вас устраивает. breaks
Аргумент переопределяет аргументы bins
и binwidth
.
library(ggplot2)
set.seed(123)
x <- data.frame(x = sample(1:100, 1000, replace = TRUE))
ggplot(x)
geom_histogram(aes(x), breaks = c(0, 13, 27, 45, 88, 100), color = "black")
scale_x_continuous(breaks = c(0, 13, 27, 45, 88, 100))
Если вам нужно n равных ячеек в определенном диапазоне (скажем, 0-100), используйте breaks = seq(0, 100, 100/n)
. Это может быть полезно, если вы хотите иметь диапазон, который шире, чем данные. Например, в моей случайной выборке нет значения больше 91, но я знаю, что 100 — это возможное значение, поэтому моя ячейка должна быть расширена до 100.
Комментарии:
1. Привет, Бен, спасибо за ответ! Я прояснил свой вопрос, потому что понял, что я недостаточно эффективно сообщаю о том, что пытаюсь сделать
2. @Nova — Я обновил свой ответ, чтобы сгенерировать то, что вы хотите.