Как добавить образец вертикальной линии в gplot?

Рассмотрим приведенный ниже график, заданный этим кодом:

require(ggplot2)
my_data<-c(70,  71, 75, 78, 78, 79, 80, 81, 84, 85, 87, 87, 90, 91, 95, 95, 96, 96, 97, 98, 98, 100,    101,    102,    102,    102,    102,    104,    104,    104,    107,    107,    109,    110,    110,    110,    111,    112,    113,    113,    114,    115,    118,    118,    118,    120,    124,    131,    137,    137,    139,    145,    158,    160,    162,    165,    169,    177,    179,    180)    


qplot(my_data,dist, geom="line")+xlab("x values")+ylab("Density")+
geom_point()+
ggtitle("cool graph Distribution") + 
geom_line(color="black", size=0.1) +
geom_line(stat = "vline", xintercept = "mean", colour = "red", size=1.1)

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

Моя цель — добавить на график еще одну синюю линию, которая:

  1. Пересечение с кривой
  2. Показать значение по оси X
  3. Добавьте заголовок поверх него

для визуализации это должно выглядеть так: введите здесь описание изображения

Я знаю, как добавить geom_line, но она идет снизу вверх, мне нужно "пересечение в одной точке" с кривой.


person adhg    schedule 06.05.2015    source источник
comment
возможный дубликат Добавление вертикальной линии в сюжет ggplot   -  person QuishSwash    schedule 07.05.2015
comment
Не согласен с дубликатом: в этих ответах используется geom_vline, который не подходит для этого вопроса. (OP нужна линия, которая идет только от y = 0 до линии распределения, а не до конца графика.) Вероятно, есть и другие дубликаты, но указанный выше не подходит.   -  person Gregor Thomas    schedule 07.05.2015


Ответы (1)


Это действительно более или менее то же самое. Я предпочитаю использовать annotate для таких вещей. (Я бы лично сделал вашу красную линию с аннотацией.) Просто рассчитайте, куда вы хотите, чтобы все шло, и добавьте их на график:

qplot(my_data,dist, geom="line")+xlab("x values")+ylab("Density")+
    geom_point()+
    ggtitle("cool graph Distribution") + 
    geom_line(color="black", size=0.1) +
    geom_line(stat = "vline", xintercept = "mean", colour = "red", size=1.1) +
    annotate(geom = "segment", x = 98, xend = 98, y = 0,
             yend = dnorm(98, mean = mean(my_data), sd = sd(my_data)),
             color = "blue") +
    annotate(geom = "text", x = 98, y = -.02 * max(dist), label = "98")

Я оставлю название наверху в качестве «упражнения для читателя», оно должно быть довольно простым, исходя из уже имеющихся фрагментов.

person Gregor Thomas    schedule 06.05.2015