在更高级别订购箱线图(R,ggplot2)

Order boxplot at higher level (R, ggplot2)

我正在使用以下代码:

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

这导致了这个情节:

如何在更高级别对箱线图进行排序,即按 sort_table data.frame 中定义的 class?以及如何添加指示每个 class 的标签?期望的结果如下所示:

请注意,我需要将其应用于更大的数据集,因此我需要使用 sort_table data.frame 和 而不是 进行排序 "manual" 使用类似 c(1,3,8,2,6,4) 的方式进行排序。谢谢。

您可以先 merge mtcarssort_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")

如果要删除小平面周围的边距,请添加 + theme(panel.spacing.x = unit(0, "pt"))