12 Stimmen

Fügen Sie Text zu einem facettierten Plot in ggplot2 mit Daten auf der X-Achse hinzu

Ich bin neu bei ggplot2 und es ist wunderbar, aber ich habe Schwierigkeiten mit einer Sache.

Ich habe eine Anzahl von Zeitreihen geplottet, die ein Jahr umfassen. Die X-Achse stammt von einer Variable der Klasse Date. Ich habe das Diagramm gefacettiert, so dass ich 7 Zeitreihen in einer Spalte mit unabhängigen y-Achsen habe. Der ganze Zweck dieser Grafik ist der Vergleich der Korrelation jedes Facetten mit der obersten Facette.

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

Dies erweist sich als extrem schwierig, weil geom_text() x- und y-Koordinaten für jedes Textstück erfordert. Wie gebe ich Koordinaten an, wenn die X-Achse Daten und die Y-Achse für jede Facette unterschiedlich sind? Hier sind einige Beispieldaten und der bisherige Code, damit Sie reproduzieren können, was ich bisher habe:

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='Vergleich der Zeitreihen', xlab='Monat (2011)',ylab='Wert') + 
        facet_grid(product ~ ., scale = "free_y")

12voto

sebastian-c Punkte 14627

Dies ist nicht der sauberste Code, aber ich denke, er ist in etwa das, was du suchst:

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 mit Ausdrücken

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X