2012-07-12 6 views
10

Ich bin neu bei ggplot2 und es war wunderbar, aber ich habe Schwierigkeiten mit einer Sache.Fügen Sie Text zu einem facettierten Diagramm in ggplot2 mit Daten auf der X-Achse hinzu

Ich habe eine Reihe von Zeitreihen gezeichnet, die ein Jahr umfassen. Die X-Achse wird von einer Variablen der Klasse Date abgeleitet. Ich habe die Handlung facettiert, so dass ich 7 Zeitreihen in einer Spalte mit unabhängigen y-Achsen habe. Der springende Punkt dieser Grafik ist es, die Korrelation jeder Facette mit der oberen Facette zu vergleichen.

Das letzte, was ich tun möchte, ist Text (die geschätzte Pearson Korrelation zwischen jeder Facette und der ersten) zu dem Diagramm in der oberen rechten Ecke jeder Facette hinzuzufügen.

Dies erweist sich als extrem schwierig, weil geom_text() X- und Y-Koordinaten für jedes Textbit erfordert. Wie gebe ich Koordinaten an, wenn die X-Achse Daten ist und die Y-Achse für jede Facette unterschiedlich ist? Hier einige Beispieldaten und der Code Ich habe so weit, so dass Sie reproduzieren können, was ich habe, so weit:

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 Danke für die Bearbeitung! – rnorberg

Antwort

9

Dies ist nicht der sauberste Code, aber ich denke, es ist ein wenig wie, was Sie nach:

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

Absolut perfekt! Danke vielmals. Aus Neugier, Was macht der 'show.guide = FALSE'? – rnorberg

+1

'show.guide = FALSE' verhindert, dass der Text in der Legende erscheint. Es wird jetzt möglicherweise nicht mehr benötigt, wenn ich die Farbe auf Schwarz setze. Ich werde es entfernen, denke ich. –

Verwandte Themen