2013-10-27 4 views
20

Я построения графика, используя следующий фрагмент кода:Добавление вертикальной линии в участке ggplot

library (ggplot2) 

png (filename = "graph.png") 
stats <- read.table("processed-r.dat", header=T, sep=",") 
attach (stats) 
stats <- stats[order(best), ] 
sp <- stats$A/stats$B 
index <- seq (1, sum (sp >= 1.0)) 
stats <- data.frame (x=index, y=sp[sp>=1.0]) 
ggplot (data=stats, aes (x=x, y=y, group=1)) + geom_line() 
dev.off() 

enter image description here

1 - Как можно добавить вертикальную линию на графике, которая пересекает в конкретной значение y (например, 2)?

2 - Как можно сделать начало оси y равным 0,5 вместо 1?

ответ

29

Вы можете добавить вертикальную линию с geom_vline(). В вашем случае:

+ geom_vline(xintercept=2) 

Если вы хотите увидеть также ряд 0.5 на вашей оси у, добавить scale_y_continuous() и установить limits= и breaks=

+ scale_y_continuous(breaks=c(0.5,1,2,3,4,5),limits=c(0.5,6)) 
+1

Кажется, что OP хочет нарисовать вертикальную линию «при определенном значении y». Приветствия. – Henrik

+0

@ Хенрик Да, вы правы, я неправильно понимаю вопрос, но ZNK дал уже ответ на эту проблему –

12

Что касается первого вопроса:

Этот ответ предполагая, что значение 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() 

initial plot

Что вам нужно сделать, это использовать 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]) 

plot with vertical line

Надеюсь, что это поможет!

Смежные вопросы