Что касается первого вопроса:
Этот ответ предполагая, что значение 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()
Что вам нужно сделать, это использовать 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
И мы можем использовать это значение, чтобы определить, где х перехват должен быть:
ggplot(data=stats, aes (x=x, y=y, group=1)) + geom_line() +
geom_vline(xintercept = rev(stats[trunc(stats$y) == 2, "x"])[1])
Надеюсь, что это поможет!
Кажется, что OP хочет нарисовать вертикальную линию «при определенном значении y». Приветствия. – Henrik
@ Хенрик Да, вы правы, я неправильно понимаю вопрос, но ZNK дал уже ответ на эту проблему –