2012-07-12 41 views
10

Soy nuevo en ggplot2 y ha sido maravilloso, pero tengo dificultades con una cosa.Agregue texto a un diagrama con facetas en ggplot2 con fechas en el eje X

He trazado una serie de series de tiempo que abarcan un año. El eje X se deriva de una variable de la clase Date. He modelado la trama para que tenga 7 series de tiempo en una columna con ejes Y independientes. El objetivo de este gráfico es comparar la correlación de cada faceta con la faceta superior.

Lo último que me gustaría hacer es agregar texto (la correlación de Pearson estimada entre cada faceta y la primera) a la trama en la esquina superior derecha de cada faceta.

Esto está demostrando ser extremadamente difícil porque geom_text() requiere coordenadas xey para cada bit de texto. ¿Cómo especifico coordenadas cuando el eje X es fechas y el eje Y es diferente para cada faceta? He aquí algunos datos de la muestra y el código que tengo hasta ahora para que pueda reproducir lo que tengo hasta ahora:

library(ggplot2) 

date <- rep(as.Date(1:365,origin='2011-1-1'),7) 
location <- factor(rep(1:7,365)) 
product <- rep(letters[1:7], each=365) 
value <- c(sample(1:10, size=365, replace=T),sample(1:3, size=365, replace=T), 
      sample(10:100, size=365, replace=T), sample(1:50, size=365, replace=T), 
      sample(1:20, size=365, replace=T),sample(50:100, size=365, replace=T), 
      sample(1:100, size=365, replace=T)) 
dat<-data.frame(date,location,product,value) 

qplot(date, value, data=dat, geom="line", color=location, group=location, 
     main='Time Series Comparison', xlab='Month (2011)',ylab='Value') + 
     facet_grid(product ~ ., scale = "free_y") 
+0

@Andrie Gracias por la edición! – rnorberg

Respuesta

9

Este no es el código más bonito, pero creo que es algo así como lo que está buscando:

library(plyr) 

corr_dat<-ddply(dat, .(product), summarise, value=value) 
corr.df<-unstack(corr_dat, value~product) 

corr_plot <- data.frame(date=max(dat$date), 
         label=paste0("rho==",round(cor(corr.df)[,1], 2)), 
         ddply(dat, .(product), summarise, 
          value=(min(value)+max(value))/2)) 

ggplot(dat, aes(x=date, y=value, color=location, group=location)) + 
    geom_line()+ 
    facet_grid(product ~ ., scale = "free_y")+ 
    geom_text(data=corr_plot, aes(x=date, y=value, label=label), 
      colour="black", inherit.aes=FALSE, parse=TRUE) 

Plot with expressions

+0

¡Absolutamente perfecto! Gracias una tonelada. Por curiosidad, ¿qué hace 'show.guide = FALSE'? – rnorberg

+1

'show.guide = FALSE' impide que el texto aparezca en la leyenda. Puede que ya no se requiera más ahora que configuro el color en negro. Lo eliminaré, creo. –

Cuestiones relacionadas