R语言ggplot绘制折线图添加误差棒报错问题求助
问题原因
你在ggplot()的全局美学映射中定义了y = cc,该映射会默认被所有图层继承。但geom_errorbar使用的汇总数据集btwsummary不包含cc字段,ggplot仍会尝试匹配该变量,最终因变量长度与当前图层数据长度不匹配触发报错。
你去掉误差棒后可以正常绘图,是因为仅有的两个图层中:
geom_point使用原始数据集,存在cc字段geom_line虽然使用汇总数据集,但你手动覆盖了y轴映射为y=mean,不会触发变量缺失问题
修复方案
推荐选择第一种方案,层级逻辑更清晰:
方案1:取消全局y轴映射,给各图层单独配置y轴
graph <- ggplot(brixtwenty, aes(x=Days, color=Treatment)) + # 散点图层用原始数据的cc列 geom_point(aes(y=cc)) + # 折线图层用汇总数据的均值列 geom_line(data = btwsummary, aes(y=mean)) + # 误差棒图层用汇总数据的均值、标准差,加width参数优化显示 geom_errorbar(data=btwsummary, aes(y=mean, ymin=mean-sd, ymax=mean+sd), width=0.2)
方案2:误差棒图层关闭全局映射继承
如果你不想修改全局配置,也可以直接在误差棒图层关闭继承,单独补全所需映射:
graph <- ggplot(brixtwenty, aes(x=Days, y=cc, color=Treatment)) + geom_point() + geom_line(data = btwsummary, aes(y=mean)) + geom_errorbar(data=btwsummary, aes(x=Days, y=mean, ymin=mean-sd, ymax=mean+sd, color=Treatment), inherit.aes = FALSE, width=0.2)
内容的提问来源于stack exchange,提问作者Juli P
相关产品推荐
相关产品推荐

