2011-08-23 15 views
8

Los datos son una serie de fechas y horas.¿Cómo crear un diagrama de dispersión de tiempo con R?

date time 
2010-01-01 09:04:43 
2010-01-01 10:53:59 
2010-01-01 10:57:18 
2010-01-01 10:59:30 
2010-01-01 11:00:44 
… 

Mi objetivo era representar un diagrama de dispersión con la fecha en el eje horizontal (x) y el tiempo en el eje vertical (y). Supongo que también podría agregar una intensidad de color si hay más de una vez para la misma fecha.

Fue bastante fácil crear un histograma de fechas.

mydata <- read.table("mydata.txt", header=TRUE, sep=" ") 
mydatahist <- hist(as.Date(mydata$day), breaks = "weeks", freq=TRUE, plot=FALSE) 
barplot(mydatahist$counts, border=NA, col="#ccaaaa") 
  1. no he descubierto aún cómo crear un diagrama de dispersión en que el eje son la fecha y/u hora.
  2. También me gustaría poder tener eje no necesario con fechas lineales AAAA-MM-DD, pero también basado en meses como MM-DD (por lo que se acumulan diferentes años), o incluso con una rotación en semanas.

Cualquier ayuda, RTFM URI bofetadas o sugerencias es bienvenida.

Respuesta

15

El paquete ggplot2 maneja fechas y horas con bastante facilidad.

crear algunos datos de fecha y hora:

dates <- as.POSIXct(as.Date("2011/01/01") + sample(0:365, 100, replace=TRUE)) 
times <- as.POSIXct(runif(100, 0, 24*60*60), origin="2011/01/01") 

df <- data.frame(
    dates = dates, 
    times = times 
) 

a continuación, obtener algunos ggplot2 magia. ggplot se ocupará automáticamente con las fechas, pero para obtener el eje de tiempo formato correcto uso scale_y_datetime():

library(ggplot2) 
library(scales) 
ggplot(df, aes(x=dates, y=times)) + 
    geom_point() + 
    scale_y_datetime(breaks=date_breaks("4 hour"), labels=date_format("%H:%M")) + 
    theme(axis.text.x=element_text(angle=90)) 

enter image description here


En cuanto a la última parte de su pregunta, en la agrupación por semana, etc: Para lograr esto puede que tenga que resumir previamente los datos en los segmentos que desee. Puede utilizar posiblemente plyr para esto y luego pasar los datos resultantes a ggplot.

+0

muchas gracias Andrie. Justo en el lugar^H plot :) – karlcow

+0

Instalé ggplot2, porque parece que ggplot no está disponible. – karlcow

+0

@karlcow Mis disculpas. Sí, debería haber dicho 'ggplot2'. Respuesta editada para reflejar esto. – Andrie

0

Comenzaría leyendo sobre como.POSIXct, strptime, strftime y difftime. Estas y otras funciones relacionadas deberían permitirle extraer los subconjuntos deseados de sus datos. El formateo es un poco complicado, así que juega con los ejemplos en los archivos de ayuda.
Y, una vez que las fechas se convierten en una clase de POSIX, as.numeric() será convertir a todos en valores numéricos, por lo tanto, fácil de ordenar, trama, etc.

Editar: la sugerencia de Andre para jugar w/ggplot a simplificar las especificaciones de su eje es una buena.

Cuestiones relacionadas