我有一个看起来像这样的数据:
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))
但是,如果我希望它们在x轴上的顺序为cat4,cat3,cat2,cat1,该怎么办。甚至以完全不同的顺序?
答案 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))