如何得到一个垂直 geom_vline 到类日期的 x 轴?

即使我发现哈德利的文章在谷歌组 POSIXctgeom_vline,我不能得到它完成。我有一个时间序列,从而想画出一条垂直线的年份,例如1998年,2005年和2010年。我尝试使用 ggplotqplot语法,但仍然看不到任何垂直线,或者垂直线是在第一个垂直网格上绘制的,整个系列有点奇怪地向右移动。

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

96116 次浏览

试试 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)) +
geom_line() +
geom_vline(xintercept=as.numeric(tmp$x[c(13, 24)]),
linetype=4, colour="black")
print(p)

geom_vline example plot

你也可以做 geom_vline(xintercept = as.numeric(as.Date("2015-01-01")), linetype=4),如果你想线保持在地方,无论你的日期是否在第120行。

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()

enter image description here

取决于如何将“日期”列传递给 aesas.numericas.POSIXct都可以工作:

library(ggplot2)

  1. 使用 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)
    
  2. 使用 aes(Dates, ...)

    ggplot(df, aes(Dates, value)) +
    geom_line() +
    geom_vline(xintercept = as.POSIXct(as.Date("2020-11-20")),
    color = "red",
    lwd = 2)