【问题标题】:How to add a line in ggplot2 using geom_path in a bar graph如何在条形图中使用geom_path在ggplot2中添加一条线
【发布时间】:2015-07-13 04:42:05
【问题描述】:

我写了这段代码:

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。

但是,我的代码给了我一个错误:

“评估错误(expr,envir,enclos):找不到对象'b'”

更新: 感谢克里斯,将“填充”移动到 geom_bar 解决了原始问题。但是现在,一个新的问题发生了。我将代码更改为:

    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)

因为原来的ggplot()函数中没有“填充”,所以误差线的位置搞乱了。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    您应该在您的第一个 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))
    

    编辑:为完整性添加代码

    【讨论】:

    • 看不出来,剧情有什么变化?
    • 哦,我现在明白了,它绘制了一条从第二条到第三条的路径。酷。
    • @small_data88 如果包含size=2lty=2 等,您会更清楚地看到差异。
    • 我现在有一个新问题。我尝试通过代码添加错误栏。由于“填充”参数不在 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,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)) 打印(q)"
    • 如果有其他问题,请接受此答案并打开一个新问题。