Как получить вертикальную geom_vline к оси x даты класса?
Несмотря на то, что я нашел запись Hadley в группе 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
.
Ответы
Ответ 1
Попробуйте 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]()
Ответ 2
Вы также можете сделать geom_vline(xintercept = as.numeric(as.Date("2015-01-01")), linetype=4)
, если хотите, чтобы линия оставалась на месте независимо от того, находится ли ваша дата в 120-й строке.
Ответ 3
Я попробовал следующие два примера:
g4 <- g3 + geom_vline(aes(xintercept = as.Date(c("2015-04-09"))), col = "black", lwd=1, lty=2)
g4 <- g3 + geom_vline(aes(xintercept = as.numeric(dt[301])), col = "black", lwd=1, lty=2)
Однако я не могу получить несколько номеров строк для ввода. Если я использую dt [92, 301, 475]. Я получаю сообщение об ошибке, говоря, что длина должна быть либо 1, либо равна общему количеству строк.