我想在条形图中添加一条短水平线。线的左边缘从y轴开始,右边缘延伸到绘图表面。该线表示y轴变量的平均值。我正在使用geom_segment()
来添加线条,但这会将柱子的位置向右移动。
如何在不移动条形位置的情况下添加线条?
另外,为什么会这样呢?几乎看起来geom_segment()
占据渲染表面的某个区域,而不是在现有图形的顶部打印。
样本数据框:
df
x y
1 FALSE 13.02041
2 TRUE 14.37956
没有geom_segment()
:
p <- ggplot(df, aes(x=x, y=y))
p + geom_bar(stat = "identity")
使用geom_segment()
:
avg.y <- 14.27065
p + geom_bar(stat = "identity") +
geom_segment(aes(x=0, xend=.1, y=avg.y, yend=avg.y))
在条形图中,条形(隐含地)以1和2为中心,并且在任一方向上延伸大约+/- 0.45。因此,您可以更改细分的x范围,使其位于您想要的位置。
ggplot(df, aes(x, y)) +
geom_bar(stat="identity") +
geom_segment(aes(x=0.5, xend=2.5, y=avg.y, yend=avg.y), colour="red") +
theme_bw()
在回答您的评论时,让我们使用ggplot_build
查看原始图表的基础结构。现在让我们来看看data
的pb
元素。请注意,在第一个数据框中,条形图的内部绘图数据表示条形图位于x = 1和x = 2。 xmin
和xmax
显示条宽的范围。第二个数据框是内部段定位。该段位于x = 0到x = 0.1的位置。因此,在0.1(段的右边缘)和0.45(FALSE
条的左边缘)之间没有任何内容,这可以在您在问题中发布的第二个图中看到。
p = ggplot(df, aes(x, y)) +
geom_bar(stat="identity") +
geom_segment(aes(x=0, xend=0.1, y=avg.y, yend=avg.y))
pb = ggplot_build(p)
pb$data
[[1]] x y PANEL group ymin ymax xmin xmax colour fill size linetype alpha 1 1 13.02040 1 1 0 13.02040 0.55 1.45 NA grey35 0.5 1 NA 2 2 14.37956 1 2 0 14.37956 1.55 2.45 NA grey35 0.5 1 NA [[2]] x xend y yend PANEL group colour size linetype alpha 1 0 0.1 14.27065 14.27065 1 -1 red 0.5 1 NA 2 0 0.1 14.27065 14.27065 1 -1 red 0.5 1 NA