Определите интервалы/подгруппы (из непрерывной переменной), которые будут отображаться на блочной диаграмме (ggplot в R)

Используя набор данных радужной оболочки в качестве примера, я хотел бы нарисовать коробчатую диаграмму (только для видов setosa) с Sepal.Length по оси x и Petal.Length по оси y. Однако для этого, во-первых, требуется объединение непрерывных Sepal.Length данных по оси x в группы: Sepal.Length < 4.7, Sepal.Length 4.7 - 5, Sepal.Length 5 - 5.2 and Sepal.Length > 5.2. Во-вторых, требуется группировка первой и третьей группы. Я попробовал код ниже, но это не работает. Мы ценим любые предложения. Спасибо.

library(ggplot2)
bin1 <- iris[iris$Sepal.Length < 4.7, ]
bin2 <- iris[iris$Sepal.Length >=4.7 & <5, ]
bin3 <- iris[iris$Sepal.Length >=5 & <5.2, ]
bin4 <- iris[iris$Sepal.Length >=5.2, ]
binA <- bin1 + bin3
order <- c(bin2, binA, bin4)
ggboxplot(iris[iris$Species == "setosa", ], x="Sepal.Length", y="Petal.Length") + scale_x_discrete(limits=order)
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
0
202
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я бы использовал функцию cut, чтобы делать то, что делаете вы. После этого вы можете использовать fct_collapse, чтобы изменить точки разреза. Вы можете сделать что-то вроде следующего:

library(dplyr)
library(forcats)
library(ggplot2)

iris %>% 
  filter(Species == "setosa") %>% 
  mutate(sub_species = cut(Sepal.Length, breaks = c(-Inf, 4.7, 5, 5.2, Inf))) %>% 
  mutate(sub_species = fct_collapse(sub_species,
                                    combined = c("(-Inf,4.7]", "(5.2, Inf]"))) %>% 
  ggplot(aes(sub_species, Petal.Length))+
  geom_boxplot()

И это даст вам желание, которое вы хотите.

В качестве альтернативы вы можете заменить функцию cut и использовать случай dplyr, когда функция будет выглядеть так:

iris %>% 
  filter(Species == "setosa") %>% 
  # Case when to cases
  mutate(sub_a = case_when( Sepal.Length < 4.7~"A",
                            Sepal.Length < 5~ "B",
                            Sepal.Length < 5.2~ "C",
                            TRUE~"D")) %>% 
  # Collapse A and D
  mutate(collapsed = ifelse(sub_a %in% c("A", "D"), "combined", sub_a)) %>% 
  ggplot(aes(collapsed, Petal.Length))+
  geom_boxplot()

В комментарии OP вопрос был расширен, чтобы включить создание нескольких других подклассов. Чтобы решить эту проблему, я буду использовать функцию mutate, чтобы создать несколько дополнительных подкатегорий, а затем использовать функцию gather, чтобы собрать их все в один столбец, сохраняя при этом данные в каждом подклассе (например, сохраняя правильные подсчеты).

iris %>% 
  filter(Species == "setosa") %>% 
  # Case when to cases
  mutate(sub_a = case_when( Sepal.Length < 4.7~"A",
                            Sepal.Length < 5~ "B",
                            Sepal.Length < 5.2~ "C",
                            TRUE~"D")) %>% 
  # Collapse A and D
  mutate(collapsed1 = ifelse(sub_a %in% c("A", "C"), "A+C", sub_a)) %>% 
  mutate(collapsed2 = ifelse(sub_a %in% c("A", "C", "D"), "A+C+D", sub_a)) %>% 
  # Pull all the new categories together into a new column called subclass
  gather(new_cat, subclass, sub_a:collapsed2) %>% 
  # Filter to desired
  filter(subclass %in% c("B", "A+C", "D", "A+C+D")) %>% 
  ggplot(aes(subclass, Petal.Length))+
  geom_boxplot()

@SylviaRodriguez, нет проблем! Рад помочь.

MDEWITT 22.05.2019 15:19

Спасибо еще раз. Я столкнулся с другой проблемой, которую я хотел бы реализовать. В дополнение к графикам «B», «C» и «комбинированные», я хотел бы включить четвертое поле, состоящее из «A», «C» и «D» вместе взятых. После мутации я не мог понять, как это сделать. (Я больше знаком с неконвейерными сценариями.) Буду признателен за ваши предложения. Спасибо.

Sylvia Rodriguez 23.05.2019 01:42

Чтобы быть полностью ясным, я хотел бы построить: «B», «A + C», «D», «A + C + D». Спасибо.

Sylvia Rodriguez 23.05.2019 01:48

@SylviaRodriguez проверьте обновленный ответ. Я думаю, что это то, что вы хотите.

MDEWITT 23.05.2019 15:39

Другие вопросы по теме