Per quanto riguarda la prima domanda:
Questa risposta è partendo dal presupposto che il valore di Y che desideri sia specificamente all'interno del tuo set di dati. In primo luogo, creiamo un esempio riproducibile come non posso accedere al set di dati:
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()
Quello che dovete fare è quello di utilizzare la colonna y
nel frame di dati per cercare il valore specifico. Essenzialmente dovrai usare
ggplot(data=stats, aes (x=x, y=y, group=1)) + geom_line() +
geom_vline(xintercept = stats[stats$y == 2, "x"])
Utilizzando i dati che ho generato sopra, ecco un esempio. Dal momento che il mio telaio dati non probabile contiene il valore esatto 2
, userò la funzione trunc
per cercarlo:
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
Ora sappiamo dove tutti i valori di 2 sono. Dal momento che questo grafico è in diminuzione, ci sarà invertire tale tendenza, allora il valore più vicino al 2 sarà all'inizio:
rev(stats[trunc(stats$y) == 2, 1])
# y x
# 26 2.067315 26
e possiamo usare questo valore per specificare dove la x intercetta dovrebbe essere:
ggplot(data=stats, aes (x=x, y=y, group=1)) + geom_line() +
geom_vline(xintercept = rev(stats[trunc(stats$y) == 2, "x"])[1])
Spero che questo aiuti!
Sembra che l'OP desideri disegnare la linea verticale "con un valore particolare di y". Saluti. – Henrik
@ Henrik Sì, hai ragione, ho frainteso la domanda, ma ZNK ha già dato una risposta per quel problema –