R 如何在条形图中使用geom_路径在ggplot2中添加直线

R 如何在条形图中使用geom_路径在ggplot2中添加直线,r,ggplot2,R,Ggplot2,我写了这段代码: 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=

我写了这段代码:

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、enclose)中出错:找不到对象“b”

更新: 多亏了Chris,将“填充”移动到geom_栏解决了原始问题。但是现在,一个新的问题发生了。我将代码更改为:

    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()函数中,所以错误条的位置被弄乱了

您应该在第一次
ggplot
调用中移动
aes

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))

q我说不出,绘图发生了什么变化?哦,我现在明白了,它绘制了一条从第二条到第三条的路径。酷。@small_data88如果您包括
size=2
lty=2
等,您会更清楚地看到差异。我现在有一个新问题。我试图通过代码将错误条添加到。由于“fill”参数不在ggplot()中,因此错误条的位置被弄乱了。下面是代码:“库(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,lwymax=c+err),width=0.3,position=0.9),frame=0.X=1,X=1,X=0.X=1,X=1,X=1,X=0.9)(2,2))q=q+geom_路径(数据=路径,aes(x=x,y=y))打印(q)“如果有其他问题,请接受此答案并打开一个新问题。