使用geom_boxplot()更改整齐数据框中的箱线图顺序

时间:2020-08-27 11:23:17

标签: r ggplot2 dplyr

我有一个看起来像这样的数据:

cats = c("cat1", "cat2", "cat3", "cat4")
df = data.frame(a = rnorm(100), b = as.factor(rep(cats, 25)))

当我绘制它时,我得到这样的东西: ggplot(data = df) + geom_boxplot(aes(x = b, y = a, fill = b))

enter image description here

但是,如果我希望它们在x轴上的顺序为cat4,cat3,cat2,cat1,该怎么办。甚至以完全不同的顺序?

1 个答案:

答案 0 :(得分:1)

为ggplot定义变量as.factor()不是强制性的。默认情况下,它将重新编码变量as.factor,但是在这种情况下,它将遵循字母顺序。

但是,如果要特定顺序,则需要定义as.factor()并输入级别的顺序。

例如,如果要根据箱中值对箱形图进行排序:

cats = c("cat1", "cat2", "cat3", "cat4")
df = tibble(a = rnorm(100), b = rep(cats, 25))

library(dplyr)
position <- df %>% group_by(b) %>% summarise(median=median(a)) %>% 
  arrange(desc(median)) %>% pull(b)

df$b <- factor(df$b,levels=position)
# order_wanted <- c(2,1,4,3)
# levels(df$b) <- paste0("cat",order_wanted)

library(ggplot2)
ggplot(data = df) + geom_boxplot(aes(x = b, y = a, fill = b))

enter image description here