2012-02-02 7 views
5

tengo los siguientes datos:La colocación de la rejilla a lo largo fecha de las marcas de división

x=strptime(20010101:20010110) 
y=1:10 
z=data.frame(x,y) 

Así que mis datos es la siguiente:

  x y 
1 2001-01-01 1 
2 2001-01-02 2 
3 2001-01-03 3 
4 2001-01-04 4 
5 2001-01-05 5 
6 2001-01-06 6 
7 2001-01-07 7 
8 2001-01-08 8 
9 2001-01-09 9 
10 2001-01-10 10 

Cuando creo una trama en la base usando:

plot(x,y) 
grid(NULL,NULL) 

Mi cuadrícula vertical no se alinea con las marcas de fecha. Sé que parece un problema bastante simple, pero no he encontrado una solución para esto en ninguna parte. ¿Hay una manera de conseguir la rejilla vertical para alinearse con las marcas de la fecha de garrapatas utilizando la base de que no me requieren para hacer esto:

abline(v=as.numeric(strptime(c(20010102,20010104,20010106,20010108,20010110),'%Y%m%d'))) 

tengo una gran cantidad de parcelas con diferentes fechas y realmente me gustaría para automatizar esto tanto como sea posible, con suerte usando base.

Respuesta

3

abline puede extraer la fecha de las garrapatas de su vector POSIXlt (a través de strptime).

x=strptime(20010101:20010110,format="%Y%m%d") 
y=1:10 

plot(x,y) 
grid(nx=NA, ny=NULL) 
abline(v=axis.POSIXct(1, x=pretty(x)),col = "lightgray", lty = "dotted", lwd = par("lwd")) 

Sugeriría crear su propia función que agregaría cuadrículas horizontales y verticales.

my.grid <-function(){ 
grid(nx=NA, ny=NULL) 
abline(v=axis.POSIXct(1, x=pretty(x)),col = "lightgray", lty = "dotted", lwd = 
par("lwd")) 
} 

plot(x,y) 
my.grid() 
1

No estoy familiarizado con las complejidades de los gráficos base. Pero, ggplot hace esto de manera efectiva.

x <- strptime(20010101:20010110, format='%Y%m%d') 
y <- 1:10 
z <- data.frame(x, y) 
qplot(x,y,data=z,'point') 
6

La función axis empates sus ejes, Las marcas y etiquetas, y devuelve las posiciones de las marcas de graduación como un vector.

Puesto que usted tiene Date de datos, es necesario utilizar axis.Date para hacer esto, y luego usar abline para trazar la cuadrícula:

z=data.frame(
    x=seq(as.Date("2001-01-01"), by="+1 month", length.out=10) 
    y=1:10 
) 
plot(y~x, data=z) 
abline(v=axis.Date(1, z$x), col="grey80") 

enter image description here

+0

Gracias por esta alternativa! Me encanta cómo hay 80 formas diferentes de hacer todo en R :) – thequerist

3

Como el archivo ?grid ayuda dice, "si más se requiere un ajuste fino, [puede] usar abline(h = ., v = .) directamente ". Es un poco más trabajo, pero no mucho, y sería bastante fácil terminar una función si desea usarla a menudo.

Aquí hay una manera de hacerlo:

plot(x,y) 
abline(v = pretty(extendrange(z$x)), 
     h = pretty(extendrange(z$y)), 
     col = 'lightgrey', lty = "dotted") 
points(x,y, pch=16) 

enter image description here

+0

Gracias, ¿cómo obtuviste información sobre lo que hace el rango extendido? Ojalá pudiera aceptar más de una respuesta, se lo di a P Lapointe porque también agregó la función a la suya. – thequerist

+0

No hay problema. Simplemente revisa '? Extendrange' para aprender un poco más. Es una función utilizada por las funciones de trazado para determinar las extensiones de los ejes xey. (Compara 'plot (1:10)' y 'plot (1:10, xaxs =" i ")' para ver lo que quiero decir.) –

+0

Gracias, seguí escribiendo '? Extend_ed_range' y me preguntaba por qué no estaba llegando a ninguna parte . – thequerist

Cuestiones relacionadas