如何在条形图的每个条形上叠加线条

Ben*_*Ben 2 r ggplot2

假设我有一个像这样的条形图

ggplot(mtcars, aes(factor(cyl)))+geom_bar()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

现在我想分别在 cyl = 4,6,8 的 count = 5,4,6 处覆盖一条水平线。每条线都应该跨越它所覆盖的条的宽度。我该如何实现这个目标?

Did*_*rts 6

首先,将计数数据放入新数据框中,该数据框具有与 mtcars 中相同的列名称 cyl。

df2<-data.frame(cyl=c(4,6,8),counts=c(5,4,6))
Run Code Online (Sandbox Code Playgroud)

添加这些行的一种方法是使用geom_crossbar()并将 和 设置yyminymax相同值counts

ggplot(mtcars, aes(factor(cyl)))+geom_bar()+
  geom_crossbar(data=df2,aes(x=factor(cyl),
                  y=counts,ymin=counts,ymax=counts),color="green")
Run Code Online (Sandbox Code Playgroud)

使用 也可以实现同样的效果geom_errorbar()

ggplot(mtcars, aes(factor(cyl)))+geom_bar()+
  geom_errorbar(data=df2,aes(x=factor(cyl),
                    ymin=counts,ymax=counts),color="green") 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述