ggplot中每个时间段的日期之间的阴影

use*_*427 3 r ggplot2

我有一些每日时间序列,我正在尝试使用 来对绘图的某些区域进行着色ggplot。我想在每年的七月到八月之间进行遮阳。我正在尝试geom_rect,我可以在两个日期之间获取它,但不能在每年的相同日期之间获取它。

数据:

library(dplyr)
library(ggplot2)
library(tidyquant)

data(FANG)
data <- FANG %>% 
  filter(symbol == "FB")


data %>% 
  ggplot(aes(x = date, y = adjusted)) +
  geom_line()
Run Code Online (Sandbox Code Playgroud)

Iar*_*min 5

我们可以手动创建一个描述要着色的区域的数据框。

library(lubridate)
shade <-
  data %>% 
  transmute(year = year(date)) %>% 
  unique() %>% 
  mutate(
    from = as.Date(paste0(year, "-07-01")),
    to   = as.Date(paste0(year, "-08-31"))
  )
shade
#> # A tibble: 4 x 3
#>    year from       to        
#>   <dbl> <date>     <date>    
#> 1  2013 2013-07-01 2013-08-31
#> 2  2014 2014-07-01 2014-08-31
#> 3  2015 2015-07-01 2015-08-31
#> 4  2016 2016-07-01 2016-08-31

ggplot() +
  geom_rect(data = shade, aes(xmin = from, xmax = to, ymin = -Inf, ymax = Inf)) +
  geom_line(data = data,  aes(x = date, y = adjusted))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述