Закажите boxplot на более высоком уровне (R, ggplot2) - PullRequest
1 голос
/ 04 июля 2019

Я использую следующий код:

 library(ggplot2)
 mtcars$carb <- as.factor(mtcars$carb)
 mtcars$am <- as.factor(mtcars$am)
 sort_table <- data.frame("carb" = c(1,2,3,4,6,8), "class" = c("class A", "class B", "class A", "class C", "class B", "class A"))
 ggplot(mtcars) + 
      geom_boxplot(aes(x = carb, y = mpg, fill = am), 
          position = position_dodge(0.9))

Это приводит к этому графику: enter image description here

Как я могу отсортировать блокпост на более высоком уровнепо классу, как определено в sort_table data.frame?И как я могу добавить метки, которые обозначают каждый класс?Желаемый результат выглядит следующим образом:

enter image description here

Обратите внимание, что мне нужно применить это к большему набору данных, поэтому мне нужно отсортировать, используя данные sort_table.frame и , а не путем «ручного» упорядочения с использованием чего-то вроде c(1,3,8,2,6,4).Спасибо.

1 Ответ

2 голосов
/ 04 июля 2019

Сначала вы можете merge mtcars и sort_table, а затем использовать facet_grid

ggplot(merge(mtcars, sort_table, by = "carb")) + 
  geom_boxplot(aes(x = carb, y = mpg, fill = am), 
               position = position_dodge(0.9)) +
  facet_grid(cols = vars(class), scales = "free_x", switch = "x", space = "free")

enter image description here

Добавить + theme(panel.spacing.x = unit(0, "pt"))если вы хотите удалить поля вокруг граней.

...