如何自定义ggplot柱状图分类轴排序为small、medium、unlimited
解决ggplot柱状图自定义X轴类别顺序的问题
问题根源
你的代码里有两个关键问题导致自定义顺序不生效:
arrange(pit_size) %>% mutate(...)没有和前面的SummarypH建立管道连接,也没有将处理后的结果重新赋值给SummarypH,等于这段代码完全没起作用mutate语句末尾缺失闭合括号,语法错误导致代码执行失败
修正方案
下面两种方法都能实现你需要的small→medium→unlimited顺序:
方法1:提前处理数据框的因子顺序
修正管道连接和语法错误,将处理后的数据覆盖原数据框:
library(dplyr) library(ggplot2) # 计算统计量 SummarypH <- summarySE(df, measurevar ="pH_H", groupvars=c("pit_size"), na.rm = TRUE) # 修正后的因子处理:管道连接+闭合括号+赋值回原数据框 SummarypH <- SummarypH %>% mutate(pit_size = factor(pit_size, levels = c("small", "medium", "unlimited"))) # 绘图代码不变 p <- ggplot(SummarypH, aes(x=pit_size, y=pH_H)) + geom_bar(position=position_dodge(), stat="identity", fill="darkgreen") + geom_errorbar(aes(ymin=pH_H-se, ymax=pH_H+se), width=.2, position=position_dodge(.9)) + ylab("pH") + xlab("Soil Area") + theme_bw() p
方法2:直接在ggplot的aes中指定因子顺序
如果不想修改原数据框,可以直接在绘图时临时转换因子:
p <- ggplot(SummarypH, aes(x=factor(pit_size, levels = c("small", "medium", "unlimited")), y=pH_H)) + geom_bar(position=position_dodge(), stat="identity", fill="darkgreen") + geom_errorbar(aes(ymin=pH_H-se, ymax=pH_H+se), width=.2, position=position_dodge(.9)) + ylab("pH") + xlab("Soil Area") + theme_bw() p
补充说明
- 不需要用
arrange调整顺序,ggplot完全按照因子levels参数定义的顺序渲染类别 - 确保
levels里的字符串和你数据中pit_size的取值完全一致(大小写、空格都不能出错)
内容的提问来源于stack exchange,提问作者treelife
相关产品推荐
相关产品推荐

