Как получить вертикальную geom_vline для оси X даты класса?
Несмотря на то, что я нашел сообщение Хэдли в группе 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 ответа
Пытаться 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(xintercept = as.numeric(as.Date("2015-01-01")), linetype=4)
если вы хотите, чтобы строка оставалась на месте независимо от того, находится ли ваша дата в 120-й строке.
В зависимости от того, как вы передаете столбец "Даты" в
aes
, или
as.numeric
или же
as.POSIXct
работает:
library(ggplot2)
с помощью
aes(as.Date(Dates),...)
ggplot(df, aes(as.Date(Dates), value)) + geom_line() + geom_vline(xintercept = as.numeric(as.Date("2020-11-20")), color = "red", lwd = 2)
с помощью
aes(Dates, ...)
ggplot(df, aes(Dates, value)) + geom_line() + geom_vline(xintercept = as.POSIXct(as.Date("2020-11-20")), color = "red", lwd = 2)
As .numeric мне подходит
ggplot(data=bmelt)+
geom_line(aes(x=day,y=value,colour=type),size=0.9)+
scale_color_manual(labels = c("Observed","Counterfactual"),values = c("1","2"))+
geom_ribbon(data=ita3,aes(x=day,
y=expcumresponse, ymin=exp.cr.ll,ymax=exp.cr.uu),alpha=0.2) +
labs(title="Italy Confirmed cases",
y ="# Cases ", x = "Date",color="Output")+
geom_vline(xintercept = as.numeric(ymd("2020-03-13")), linetype="dashed",
color = "blue", size=1.5)+
theme_minimal()