Как сгенерировать гистограмму так, чтобы в ней было ровно n ячеек между заданным диапазоном в ggplot2?

#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)
  

пример https://i.stack.imgur.com/Qvx7r.png

Комментарии:

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 — Я обновил свой ответ, чтобы сгенерировать то, что вы хотите.