Etiquetar eje X en serie de tiempo trazar usando R

Soy algo nuevo para R y tengo una experiencia limitada con la ttwig en general. He podido trabajar para obtener mis datos como un objeto de serie temporal en R usando zoológico, pero me está resultando difícil etiquetar el xaxis correctamente, si es que lo tengo todo.

Cuando trazo mi objeto de zoológico

plot(z) 

El eje x solo muestra una etiqueta, el año 2010. cuando la serie se extiende semanalmente desde abril de 2009 hasta octubre de 2010.

Traté de convertir mi serie a un objeto ts, e incluso un dataframe (solo una columna y no incluye las fechas).

Simplemente, ¿cómo puedo controlar las tags del eje x en general, y con objetos de series temporales?

¡Gracias por adelantado!

Comience con un ejemplo:

 x.Date <- as.Date(paste(rep(2003:2004, each = 12), rep(1:12, 2), 1, sep = "-")) x <- zoo(rnorm(24), x.Date) plot(x) 

Si queremos diferentes ubicaciones de ticks, podemos suprimir el trazado del eje predeterminado y agregar el nuestro:

 plot(x, xaxt = "n") axis(1, at = time(x), labels = FALSE) 

O combínelos:

 plot(x) axis(1, at = time(x), labels = FALSE) 

Debe especificar las ubicaciones para las marcas, por lo que si desea valores mensuales, semanales, etc. (en lugar de las observaciones anteriores), deberá crear las ubicaciones relevantes (fechas) usted mismo:

 ## weekly ticks plot(x) times <- time(x) ticks <- seq(times[1], times[length(times)], by = "weeks") axis(1, at = ticks, labels = FALSE, tcl = -0.3) 

Ver ?axis.Date para obtener más detalles, más ?plot.zoo tiene muchos ejemplos de este tipo de cosas.

El etiquetado del eje no se alinea con divisiones incluso mensuales, pero puede ser útil en algunas situaciones. Datos aleatorios (sumdos) durante los últimos 500 días:

 xx.Date <- as.Date((Sys.Date()-500):Sys.Date()) x <- zoo(cumsum(rnorm(501)), xx.Date) tt=time(x) plot(x, xaxt ="n") tt <- time(x) ix <- seq(1, length(tt), by=60) #every 60 days fmt <- "%b-%d" # format for axis labels labs <- format(tt[ix], fmt) axis(side = 1, at = tt[ix], labels = labs, cex.axis = 0.7) 

enter image description here

plot.zoo usa las funciones del eje en los gráficos clásicos de R, pero el zoológico también ofrece gráficos en celosía a través de xyplot.zoo . Simplemente cambiando el plot a xyplot puede ser suficiente para sus necesidades:

 library(zoo) library(lattice) # create test data z <- zooreg(1:83, start = as.Date("2009-04-01"), deltat = 7) xyplot(z) 

Tenga en cuenta que hay más ejemplos en ?plot.zoo y ?xyplot.zoo , así como las tres viñetas que vienen con el zoológico. En esos lugares también puede encontrar ejemplos de un enfoque diferente que muestra cómo usar la función de axis de gráficos clásicos junto con plot.zoo para ejes altamente personalizados.

He capturado todo lo anterior y un par de opciones adicionales en un solo lugar, para mi propia referencia:

 # Time series plots with good X axis labels library(zoo) # data today = Sys.Date() dates = as.Date((today-500):today) z = zoo (100+cumsum(rnorm(501)), dates) # method1 : default X axis labels do not look good ?plot.zoo plot(z) ?plot.ts plot(ts(z)) # method 2 : Lattice library(lattice) ?xyplot.zoo xyplot(z) xyplot(z, lwd=2, col="tomato") # method 3 : XTS library(xts) ?plot.xts plot(as.xts(z)) plot(as.xts(z), auto.grid=F, major.format="%b %y", las=2) # method 4 : Base graph timeline = time(z) summary(timeline) index = seq(from=1, to=length(timeline), 90) # put ticks every 90 days plot(z, xaxt="n") axis(side=1, at=timeline[index], label=format(timeline[index], "%b %y"), cex.axis=0.8) # method 5 : ggplot library(ggplot2) library(scales) ?date_breaks df = data.frame(date=as.POSIXct(time(z)), value=as.numeric(z)) head(df) # default plot ggplot(df, aes(x=date, y=value)) + geom_line() # formatted ggplot(df, aes(x=date, y=value)) + geom_line() + scale_x_datetime(labels=date_format("%b '%y")) # custom breaks ggplot(df, aes(x=date, y=value)) + geom_line() + scale_x_datetime(labels=date_format("%b '%y"), breaks=date_breaks("3 months")) 

si la hora está en formato de fecha, esto podría ser útil.

  ggplot(data_frame, aes(date,column)) + geom_point() + ggtitle("my title")+ scale_x_date(date_breaks = "1 month",date_labels = "%b") + xlab("month") + ylab("y_axis title")