2009-12-16 37 views
9

En R (entorno informático estadístico) me gustaría en un gráfico genérico, con el tiempo en el eje x, resaltar algunos años específicos.Resaltar valores específicos en el gráfico R

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

El código de trama 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(); 

Cuando la temperatura $ bigEmdIm5 es la salida del modo de decompostion Empírico adentrándonos. Los datos son en meses, por lo que me gustaría destacar el 01/1950 hasta el 12/1950, por ejemplo.

+0

¿Puede poner los datos en alguna parte o agregar un comando para crear un marco de datos falso para que podamos ayudarle? –

+1

Además, si los datos del eje x son de la clase POSIXct, entonces llamar al 'eje (side = 1, at = tickpos)' debería ser y es una expresión idiomática mejor que forzar explícitamente un despacho. –

+0

rcs: Hm, tal vez estoy echado a perder por demasiado 'zoo' y' xts'. ¿Falla incluso cuando se usa 'Date' en lugar de la de mayor resolución. 'POSIXct'? De todos modos, ¡gracias por el aviso! –

Respuesta

11

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")) 

o región parcela de relieve 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() 

plot output http://img341.imageshack.us/img341/7292/rect.png

1

Usted puede utilizar la función chartSeries() en quantmod con un xts TimeSeries y la función addTA() añadir el fondo destacando:

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

Para esta solución tendría que cambiar mi comando de trazado supongo –

+1

Si desea una respuesta específica, necesita dar más detalles. ¿Cuál es tu comando de trazado? – Shane

+0

Actualizo mi pregunta con mis comandos de trazado actuales –

5

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

## 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() 

alt text http://dirk.eddelbuettel.com/misc/plotRegionExample.png

Mediante el uso de par("usr") evitamos la necesidad de valores explícitos para marcas región superior e inferior. Y la indexación zoo facilita la búsqueda de puntos de inicio y finalización. Esto funcionaría de la misma manera para los datos en diferentes resoluciones de tiempo.

Cuestiones relacionadas