You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R ggplot2双geom_bar柱状图如何自定义x轴顺序并解决aes报错

问题原因

当使用%>%管道符将预处理后的数据传入ggplot时,不需要再在ggplot()的第一个参数位置重复指定数据集Growth4,否则会打乱ggplot的参数接收逻辑,导致系统无法正确识别aes映射,报出Mapping should be created with aes() or aes_()的错误。
之前单个geom_bar时未报错属于参数偶然匹配的巧合,多图层时映射校验更严格就会触发报错。

解决方法

删除ggplot()中重复的Growth4参数即可,修改后完整代码如下:

Growth4 %>%
  arrange(Label) %>%
  mutate(Label = factor(Label, levels=c( "Control", "B1 <2mm 5%", "B1 <2mm 10%", 
            "B1 <2mm 20%", "B1 >2mm 5%", "B1 >2mm 10%", 
            "B1 >2mm 20%", "B2 <2mm 5%", "B2 <2mm 10%","B2 <2mm 20%", "B2 >2mm 5%", "B2 >2mm 10%", "B2 >2mm 20%", "B3 <2mm 5%", "B3 <2mm 10%", "B3 <2mm 20%", "B3 >2mm 5%", "B3 >2mm 10% ", "B3 >2mm 20%"))) %>%
ggplot(aes(x=Label))+ # 此处删除了重复传入的Growth4参数
geom_bar(aes(y=Shoot.dry.weight ), color="black", fill = "grey42", stat="identity")+
geom_errorbar(aes(ymin=Shoot.dry.weight-s.e.shoot, ymax=Shoot.dry.weight+s.e.shoot), width=.2, position=position_dodge(.9)) +
geom_bar(aes(y=-Root.Dry.weight),color="black", fill = "grey60", stat="identity")+
geom_errorbar(aes(ymin=-Root.Dry.weight-s.e.root, ymax=-Root.Dry.weight+s.e.root), width=.2, position=position_dodge(.9)) +
theme(axis.text.x=element_text(angle=90, size=12, color="black"),panel.grid.major = element_blank(), panel.grid.minor = element_blank(),panel.background = element_blank(),axis.line = element_line(colour = "black"),axis.text.y=element_text( size=14, color="black"),axis.title=element_text(size=14, face="bold"))+
ylab("Root dry weight(g)                Shoot dry weight(g)")+
xlab("Treatment")+
ylim(-3,6)
额外注意事项
  • 定义Label因子level时,B3 >2mm 10% 末尾多了一个空格,需要确保和原始数据Growth4里的对应Label文本完全一致,否则该类别会被转为缺失值不显示。
  • 已经在ggplot全局映射里指定了x=Label,后续geom层不需要重复写该参数,代码可以更简洁。

内容的提问来源于stack exchange,提问作者Charlotte Tutton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 13:57:05