2010-07-23 27 views
9

Tengo datos en un número de días desde un evento. Estos datos se muestrean de manera irregular; mis puntos de tiempo son como 0, 5, 6, 10, 104 días. No tengo información específica de fecha y hora, es decir, no tengo idea de cuándo sucedió en la vida real el evento que estoy estudiando.R + ggplot: trazado de series temporales irregulares

Me gustaría trazar, usando ggplot, mis series de tiempo. Puedo usar, digamos

p <- ggplot(data,aes(x=time,y=expression)) 
p <- p + geom_point() 

pero por supuesto mi variables del eje x se representan junto a la otra, de modo que la distancia entre t = 10 y t = 104 es el mismo que t = 5 y t = 6 . Así que puedo hacer algo como

start <- ISOdate(2001, 1, 1, tz = "") 
data$time <- start + data$time*60*60*12 

los que casi funciona, pero ahora las garrapatas en mis x-eje son terriblemente tiempos fecha inexactas. Podría volver a formatearlos tal vez? Pero no puedo ver de todos modos para hacer que el formato "días desde el inicio". Y ahora he estado buscando en Google por bastante tiempo, con la sensación persistente de que me estoy perdiendo algo seriamente obvio. ¿Soy yo?

Respuesta

4

suena como su variable de time es un factor o tal vez un vector de caracteres, no un valor numérico! Si lo hace data$time <- as.numeric(data$time) bien puede resolver su problema.

ggplot es bastante bueno en el uso del tipo correcto de escala para el tipo correcto de datos. (Tristemente, las rutinas de importación de datos en R generalmente son menos inteligentes ...)

+1

que debe ser 'as.numeric (como.caracter (data $ time))', o 'as.numeric (levels (data $ time) [data $ time])'. Las páginas de ayuda dicen que el segundo es un poco más rápido. – JoFrhwld

+0

a la derecha, si es un factor. Si ya es un vector de caracteres, que podría dar un resultado similar, entonces no necesita la conversión interna. – Harlan

+0

Estoy seguro de que el tiempo comienza como un viejo vector numérico normal, luego, una vez que lo he agregado para "comenzar" es un vector de fecha y hora o algo así. –

9

No estoy seguro si esto es lo que está buscando (vea this related question). Puede reformatear el eje y tratar la irregularidad usando las funciones scale_x. Por ejemplo:

p <- qplot(1:3, 1:3, geom='line') 
p + scale_x_continuous("", breaks=1:3, 
     labels = as.Date(c("2010-06-03", "2010-06-04", "2010-06-07"))) 

Por cierto, aquí es una función que creé para el trazado multivariantes zoo objetos:

qplot.zoo <- function(x) { 
    if(all(class(x) != "zoo")) stop("x must be a zoo object") 
    x.df <- data.frame(dates=index(x), coredata(x)) 
    x.df <- melt(x.df, id="dates", variable="value") 
    ggplot(x.df, aes(x=dates, y=value, group=value, colour=value)) + geom_line() + opts(legend.position = "none") 
} 
+0

¡Gracias! aunque resultó que la estupidez en bruto de mi parte era la culpable. ¿Qué es un objeto de zoológico? –

+0

@Mike: 'zoo' es probablemente la clase de serie temporal espaciada irregularmente más popular en R: http://cran.r-project.org/web/packages/zoo/index.html – Shane

+0

awesome. Todavía no me he acercado a las clases de series temporales de R. Estoy trabajando en series temporales de expresión de genes en este momento, ¡que tal vez tengan 6 o 7 puntos de tiempo en el mejor de los casos! ¡Sin necesidad de clases dedicadas (fuera de los ExpressionSets de Bioconductor) todavía! –

Cuestiones relacionadas