如何在动物园对象时间序列中绘制边缘以突出显示一个时期?

How to plot a fringe in zoo object time series to highlight a period?

library(zoo)
     dat<-data.frame(
          prec<-rnorm(650,mean=300),
          temp<-rnorm(650,mean = 22),
          pet<-rnorm(650,mean = 79),
          bal<-rnorm(650,mean = 225))
        colnames(dat)<-c("prec","temp","pet","bal")
        
        dat<-ts(dat,start = c(1965,1),frequency = 12)
        plot.zoo(dat)
        
        rect(xleft=1975,xright = 1982,ybottom=0,ytop=800,col= '#FFFF0022',border = "transparent")
        rect(xleft=1990,xright = 2000,ybottom=0,ytop=800,col= '#00BFFF22',border = "transparent")
        rect(xleft=2010,xright = 2015,ybottom=0,ytop=500,col= '#FF000022',border = "transparent")

但我只得到超出边界或不在正确 x 轴上的东西 This is my result so far

使用面板功能。同样使用 xblocks 可以进一步简化:

plot.zoo(dat, panel = function(x, y, ...) {
  lines(x, y, ...)
  year <- as.integer(x)
  xblocks(x, year %in% 1975:1982, col = '#FFFF0022')
  xblocks(x, year %in% 1990:2000, col = '#00BFFF22')
  xblocks(x, year %in% 2010:2015, col = '#FF000022')
})