如何在动物园对象时间序列中绘制条纹以突出显示时段?

问题描述

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,col= '#00BFFF22',border = "transparent")
        rect(xleft=2010,xright = 2015,ytop=500,col= '#FF000022',border = "transparent")

但是我只会在正确的x轴This is my result so far

之外获得或超出范围

解决方法

使用面板功能。此外,使用xblocks可以进一步简化此过程:

plot.zoo(dat,panel = function(x,y,...) {
  lines(x,...)
  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')
})

screenshot