将geom_vline与日期放在x轴上

时间:2017-04-27 14:49:33

标签: r ggplot2

我尝试在图表中包含一条垂直线,日期位于x轴上。线的位置应由特定日期确定。然而,我无法通过日期本身来控制位置,而只能通过数据集中日期的位置/线来控制位置。 由于额外的行可能会在以后的某个时间点输入数据集,因此我会使用日期而不是“位置”来寻找解决方案。

这里有一些虚拟数据来说明我的问题&的方法:

library(ggplot2)
#Setting up of Dummy Data
Dummy_date<-seq(as.Date("2017-01-01"),as.Date("2017-06-01"),by="days")
Dummy_data<-seq(1:152)
Dummy_df<-as.data.frame(cbind(Dummy_date,Dummy_data))
names(Dummy_df[1])<-"Date"
names(Dummy_df[2])<-"Data"

#Format Dates
Dummy_df$Dummy_date<-as.POSIXct(Dummy_date)

#Does not work but is the desired approach
ggplot(Dummy_df)+
 geom_point(mapping=aes(x=Dummy_date,y=Dummy_data))+
 geom_vline(aes(xintercept=as.numeric(as.Date("2017-04-01"))),type=4,col="red")

#Works but I do not like the fixed position[91] in the dataset. Line 91 contains the relevant date
 ggplot(Dummy_df)+
 geom_point(mapping=aes(x=Dummy_date,y=Dummy_data))+
 geom_vline(aes(xintercept=as.numeric(Dummy_date[91])),type=4,col="red")

提前致谢

1 个答案:

答案 0 :(得分:2)

不确定为什么tbh,但是as.POSIXct而不是as.Date可以获得你想要的东西:

library(ggplot2)

ggplot(Dummy_df) +
    geom_point(aes(Dummy_date, Dummy_data)) +
    geom_vline(aes(xintercept = as.integer(as.POSIXct("2017-04-01"))), col = "red")

PS,使用linetype代替type