我写了这段代码:
df = data.frame(a=c('A','A','B','B'),b=c('X','Y','X','Y'),c=c(1,2,3,2))
q = ggplot(df, aes(a, y=c,fill=b))+
geom_bar(position=position_dodge(), stat="identity")
path = data.frame(x=c(1,2),y=c(2,2))
q = q + geom_path(data=path,aes(x=x, y=y))
我想得到一个水平线的图,该水平线从前两个柱的连接处开始,并在最后两个柱的高度(Y轴位置)2的交界处结束。
但是,我的代码给了我一个错误:
“eval中的错误(expr,envir,enclos):找不到对象'b'”
更新: 感谢Chris,将“填充”移动到geom_bar解决了orignal问题。但现在,出现了一个新问题。我将代码更改为:
library(ggplot2)
df=data.frame(a=c('A','A','B','B'),b=c('X','Y','X','Y'),c=c(1,2,3,2),err=c(.1,.2,.1,.2))
q = ggplot(df, aes(a, y=c))+
geom_bar(aes(fill=b),position=position_dodge(), stat="identity")+
geom_errorbar(aes(ymin=c-err,ymax=c+err), width=0.3, lwd = 1, position=position_dodge(0.9))
path = data.frame(x=c(1,2),y=c(2,2))
q = q + geom_path(data=path,aes(x=x, y=y))
print(q)
因为“fill”不在原始ggplot()函数中,所以错误栏的位置搞砸了。
答案 0 :(得分:0)
您应该在第一次aes
来电中移动ggplot
:
q <- ggplot(df, aes(a, y=c)) +
geom_bar(aes(fill=b), position=position_dodge(), stat='identity')
path <- data.frame(x=c(1,2),y=c(2,2))
q <- q + geom_path(data=path,aes(x=x, y=y))
编辑:添加完整性代码