Resalte el fondo de la ttwig en un rango de tiempo específico

En un diagtwig genérico, con el tiempo en el eje x, me gustaría destacar un período de algunos años específicos.

¿Cómo puedo hacer esto mejor? Mi idea es, por ejemplo, una barra amarilla clara para los años destacados, detrás de la ttwig, por supuesto.

El código de la ttwig que tengo ahora:

pdf("temperature_imfs_big_interm5.pdf", width=6, height=8); par(mfrow=c(temperature$bigEmdIm5$nimf+1,1), mar=c(2,1,2,1)) for(i in 1:temperature$bigEmdIm5$nimf) { plot(timeline$big, temperature$bigEmdIm5$imf[,i], type="l", xlab="", ylab="", ylim=range(temperature$bigEmdIm5$imf[,i]), axes=FALSE, main=paste(i, "-th IMF", sep=""))#; abline(h=0) axis.POSIXct(side=1, at=tickpos$big) } plot(timeline$big, temperature$bigEmdIm5$residue, xlab="", ylab="", axes=FALSE, main="residue", type="l") axis.POSIXct(side=1, at=tickpos$big) dev.off(); 

Donde temperatura $ bigEmdIm5 es el resultado de la descomposición de modo emperical. Los datos son en meses, por lo que me gustaría destacar el 01/1950 hasta el 12/1950, por ejemplo.

Usando transparencia alfa:

 x < - seq(as.POSIXct("1949-01-01", tz="GMT"), length=36, by="months") y <- rnorm(length(x)) plot(x, y, type="l", xaxt="n") rect(xleft=as.POSIXct("1950-01-01", tz="GMT"), xright=as.POSIXct("1950-12-01", tz="GMT"), ybottom=-4, ytop=4, col="#123456A0") # use alpha value in col idx <- seq(1, length(x), by=6) axis(side=1, at=x[idx], labels=format(x[idx], "%Y-%m")) 

enter image description here

o trazar la región resaltada detrás de las líneas:

 plot(x, y, type="n", xaxt="n") rect(xleft=as.POSIXct("1950-01-01", tz="GMT"), xright=as.POSIXct("1950-12-01", tz="GMT"), ybottom=-4, ytop=4, col="lightblue") lines(x, y) idx < - seq(1, length(x), by=6) axis(side=1, at=x[idx], labels=format(x[idx], "%Y-%m")) box() 

enter image description here

Aquí hay una solución que usa zoo simplemente porque eso hace que el subconjunto sea fácil. También podría hacer lo mismo con la indexación estándar:

 ## create a long monthly sequence and a sub-sequence months < - seq( as.Date("1950-01-01"), as.Date("2009-12-12"), by="month") subset <- seq( as.Date("1970-01-01"), as.Date("1979-12-31"), by="month") ## generate some random values set.seed(42) values <- cumsum(rnorm(length(months))) ## plot as a zoo object, overlay a gray background and overplot a line in red library(zoo) Z <- zoo(values, months) plot(Z) rect(xleft=head(subset,1), xright=tail(subset,1), ybottom=par("usr")[3], ytop=par("usr")[4], density=NA, col="lightgray") lines(Z[subset], col='red') box() 

texto alternativo http://dirk.eddelbuettel.com/misc/plotRegionExample.png

Al usar par("usr") evitamos la necesidad de valores explícitos para las marcas de región superior e inferior. Y la indexación del zoo facilita encontrar los puntos de inicio y final. Esto funcionaría de la misma manera para los datos en diferentes resoluciones de tiempo.

Puede usar la función chartSeries() en quantmod con un xts timeSeries y la función addTA() para agregar el resaltado de fondo:

 addTA(xts(rep(TRUE,length(times)), times), on=-1, col="#333333", border=NA)