2012-07-12 7 views
10

Sono nuovo di ggplot2 ed è stato meraviglioso, ma ho difficoltà con una cosa.Aggiungi testo a un complotto sfaccettato in ggplot2 con le date sull'asse X

Ho tracciato un certo numero di serie temporali che si estendono su un anno. L'asse X deriva da una variabile della classe Date. Ho sfaccettato la trama in modo da avere 7 serie temporali in una colonna con assi y indipendenti. L'intero punto di questo grafico è di confrontare la correlazione di ogni sfaccettatura con il lato superiore.

L'ultima cosa che vorrei fare è aggiungere del testo (la correlazione stimata di Pearson tra ogni sfaccettatura e il primo) al grafico nell'angolo in alto a destra di ogni sfaccettatura.

Ciò si sta dimostrando estremamente difficile perché geom_text() richiede le coordinate xey per ogni bit di testo. Come si specificano le coordinate quando l'asse X è le date e l'asse Y è diverso per ogni sfaccettatura? Ecco alcuni dati di esempio e il codice che ho finora in modo da poter riprodurre ciò che ho finora:

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 Grazie per la modifica! – rnorberg

risposta

9

Questo non è il codice più pulita, ma penso che sia un po 'come quello che stai cercando:

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

Assolutamente perfetto! Grazie mille. Per curiosità, cosa fa il 'show.guide = FALSE'? – rnorberg

+1

'show.guide = FALSE' impedisce che il testo appaia nella legenda. Potrebbe non essere più necessario ora che ho impostato il colore sul nero. Lo rimuoverò, penso. –