Как получить вертикальную geom_vline для оси X даты класса? - PullRequest
88 голосов
/ 22 марта 2011

Несмотря на то, что я нашел сообщение Хэдли в группе Google на POSIXct и geom_vline, я не смог этого сделать.У меня есть временной ряд, и я хотел бы нарисовать вертикальную линию, например, для 1998, 2005 и 2010 годов.Я попытался использовать синтаксис ggplot и qplot, но все же я либо не вижу вертикальной линии вообще, либо вертикальная линия рисуется на самой первой вертикальной сетке, и вся серия смещается несколько странным образом вправо.

gg <- ggplot(data=mydata,aes(y=somevalues,x=datefield,color=category)) +
      layer(geom="line")
gg + geom_vline(xintercept=mydata$datefield[120],linetype=4)
# returns just the time series plot I had before, 
# interestingly the legend contains dotted vertical lines

Мое поле даты имеет формат "1993-07-01" и относится к классу Date.

Ответы [ 2 ]

126 голосов
/ 22 марта 2011

Попробуйте as.numeric(mydata$datefield[120]):

gg + geom_vline(xintercept=as.numeric(mydata$datefield[120]), linetype=4)

Простой пример теста:

library("ggplot2")

tmp <- data.frame(x=rep(seq(as.Date(0, origin="1970-01-01"),
                            length=36, by="1 month"), 2),
                  y=rnorm(72),
                  category=gl(2,36))

p <- ggplot(tmp, aes(x, y, colour=category)) +
     layer(geom="line") +
     geom_vline(aes(xintercept=as.numeric(x[c(13, 24)])),
                linetype=4, colour="black")
print(p)

geom_vline example plot

18 голосов
/ 15 февраля 2017

Вы также можете сделать geom_vline(xintercept = as.numeric(as.Date("2015-01-01")), linetype=4), если хотите, чтобы строка оставалась на месте независимо от того, находится ли ваша дата в 120-й строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...