I was wondering if it's possible to dynamically generate geom_vlines and annotations for a ggplot based on the contents of another dataframe.
I currently have a dataframe of the following structure, which I use to plot a time-series:
$ Date : Date, format: "2021-07-02" "2021-07-05" "2021-07-06" "2021-07-07" ...
$ type : chr "25 25" "25 25" "25 25" "25 25" ...
$ dec : num -0.193 -0.189 -0.176 -0.195 -0.219
I then use that df to plot a chart:
ggplot(df)+geom_line(aes(x=Date, y=type, color=dec))+geom_point(aes(x=Date, y=dec, color=type))+
geom_hline(yintercept = 0)+geom_vline(xintercept = as.numeric(ymd("2022-08-25")), linetype="dashed", color = "red")+
geom_vline(xintercept = as.numeric(ymd("2022-07-19")), linetype="dashed", color = "red")+geom_vline(xintercept = as.numeric(ymd("2022-04-19")), linetype="dashed", color = "red")+annotate(x=as.Date(ymd("2022-08-25")), y=+Inf,vjust=1,hjust=2.1,size=3,label="25/08/22 No:1.6", geom="text", angle=90)+
annotate(x=as.Date(ymd("2022-07-19")), y=+Inf,vjust=1,hjust=2.1,size=3,label="19/07/22 No:2.1", geom="text", angle=90)+annotate(x=as.Date(ymd("2022-04-19")), y=+Inf,vjust=1,hjust=2,size=3,label="19/04/22 No:2.4", geom="text", angle=90)
I currently have to enter both the geom_vlines and corresponding annotations manually, and it's becoming an increasingly unwieldy exercise to complete if a lot of annotations are necessary. I was wondering if it would be possible to dynamically generate these annotations and vlines from another dataframe?
I've been to source and tidy-up this data, and now have it in a dataframe like this:
$ Date : Date, format: "2022-08-25" "2022-07-19" "2022-04-19" ...
$ Amount : num 1.6 2.4 2.1 ...
Realise it may be a bit 'out there' but any advice/assistance is greatly appreciated.
With thanks to Jon Spring, it's now working as intended. Using:
ggplot(df)+geom_line(aes(x=Date, y=type, color=dec))+geom_point(aes(x=Date, y=dec, color=type))+
geom_hline(yintercept = 0)+
geom_vline(data = df2, aes(xintercept = Date), linetype="dashed", color = "red")+geom_text(data = df2, aes(x = Date, y = Inf, label = Date), vjust=1,hjust=2.1,size=3,angle=90)