当 x 轴为因子时,使用 ggplot 添加一条竖直线

13

以下代码在ggplot2版本.9之前可以使用。这个方式现在不可行了吗?

df = data.frame(x = letters[1:26], y=abs(rnorm(26)))
ggplot(df, aes(x=x, y=y)) + geom_bar() + geom_vline(xintercept='m')
我遇到了以下错误:
在执行get(as.character(FUN), mode = "function", envir = envir)时出错: 对象'm'的模式不是函数。
2个回答

15

我不确定(不记得)你的原始代码是否适用于旧版ggplot,但是你可以使用另一种方法,例如:

ggplot(df, aes(x=x, y=y)) + geom_bar() + geom_vline(xintercept=which(df$x == 'm'))

希望这能帮到您!!!


1
非常感谢。这个完美地解决了问题。对于任何使用它的人,有一个小提示:如果您指定xlim,那么它将无法正常工作。例如,我实际上是在反转顺序(即从大到小)。在这种情况下,which会返回反转之前的位置。不过很容易修复。 - jbryer

4

这篇回答主要讨论如何在自定义的分类x轴上添加竖线的更广泛问题。

我有五个组,每个组有五个因素。我想在每个组的最后一个因素后面添加4条竖线来区分这五个组(在本例中为'E'位置)。@dickoa 的方法对我的情况不起作用。当我使用:

geom_vline(xintercept=which(df$x == 'm'))

它只在第三组的“m”处添加垂直线。我发现我可以尝试这样做:

geom_vline(xintercept = c(1.5,2.5,3.5,4.5))

至少对于我的情况,这个方法非常有效。您可能需要尝试几次才能找到适合您情况的模式。

我一直想知道如何根据x/y轴的比例添加垂直/水平线。例如,xintercept = 0.5表示在x轴中间添加垂直线,xintercept = 0.25表示第一季度。然而,我找不到关���这个主题的任何知识。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接