如何将垂直的geom_vline设置为上课日期的x轴?


109

即使我在POSIXct和的google组中找到了Hadley的帖子geom_vline,也无法完成。我有一个时间序列,例如1998年,2005年和2010年,我想画一条垂直线。我尝试了ggplotand 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”,属于class Date


1
您可以在数据框中添加几行,以便我们尝试您的示例吗?
Sarah West,

Answers:


141

尝试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示例图


我发现'as.numeric()'实际上很难找到!谢谢。
2013年

3
我想知道是否geom_vline(aes(xintercept=as.numeric(x[c(13, 24)])), linetype=4, colour="black")会更惯用,例如使用aes代替tmp$
大卫·阿伦堡

1
该解决方案不再起作用。代码产生```错误:尝试创建没有统计信息的图层。运行rlang::last_error()以查看错误发生的位置
.``'

30

geom_vline(xintercept = as.numeric(as.Date("2015-01-01")), linetype=4)如果您希望该行保留在原位置,无论您的日期是否在第120行,也可以这样做。


13
在我的机器上(带有R 3.2.2和ggplot 1.0.1的Win10),我不得不将日期强制转换为POSIXct以使其正确对齐: as.POSIXct(as.Date(c("2016-12-01","2017-02-01")))
Jthorpe

谢谢Jthorpe ..这是唯一为我工作的版本
ColorStatistics

2

数字对我有用

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

代码输出

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.