关于第一个问题:
这个答案是假设您想要的 Y 值专门在您的数据集中。首先,让我们创建一个可重现的示例,因为我无法访问您的数据集:
set.seed(9999)
stats <- data.frame(y = sort(rbeta(250, 1, 10)*10 ,decreasing = TRUE), x = 1:250)
ggplot(data=stats, aes (x=x, y=y, group=1)) + geom_line()
![初始情节](https://i.stack.imgur.com/Ps5Hi.png)
您需要做的是使用y
数据框中的列来搜索特定值。基本上你需要使用
ggplot(data=stats, aes (x=x, y=y, group=1)) + geom_line() +
geom_vline(xintercept = stats[stats$y == 2, "x"])
使用我上面生成的数据,这里有一个例子。由于我的数据框不太可能包含确切的值2
,我将使用该trunc
函数来搜索它:
stats[trunc(stats$y) == 2, ]
# y x
# 9 2.972736 9
# 10 2.941141 10
# 11 2.865942 11
# 12 2.746600 12
# 13 2.741729 13
# 14 2.693501 14
# 15 2.680031 15
# 16 2.648504 16
# 17 2.417008 17
# 18 2.404882 18
# 19 2.370218 19
# 20 2.336434 20
# 21 2.303528 21
# 22 2.301500 22
# 23 2.272696 23
# 24 2.191114 24
# 25 2.136638 25
# 26 2.067315 26
现在我们知道 2 的所有值在哪里。由于该图是递减的,我们将其反转,那么最接近 2 的值将位于开头:
rev(stats[trunc(stats$y) == 2, 1])
# y x
# 26 2.067315 26
我们可以使用该值来指定 x 截距应该在哪里:
ggplot(data=stats, aes (x=x, y=y, group=1)) + geom_line() +
geom_vline(xintercept = rev(stats[trunc(stats$y) == 2, "x"])[1])
![用垂直线绘制](https://i.stack.imgur.com/eo9jq.png)
希望有帮助!