2016-05-23 13 views
1

Ich frage mich, wie man mehrere Graphen in einem Bildschirm mit ggplot() und facet_grid() plotten kann, weil ich diesen Prozess wirklich mehrmals für verschiedene statistische Variablen wiederholen muss.Mehrere Graphen mit ggplot() und facet_grid() plotten

Ich habe zwei Datenrahmen zufrieden stellende Beobachtungen und einen anderen mit Vorhersagen. Sie sind beide eine Matrix von 550 x 76.

Datenrahmen 1:

Observations x1 x2 x3 x5 x6 x7 x8 x9 x10 x11 x13 .... x75 
Observation1 -0.1 0.05 0.1 0.2 0.3 0.04 0.3 -0.1 0.02 0.02 -0.2 ....0.8 
Observation2 -0.3 0.05 0.1 0.1 0.3 0.03 0.3 -0.1 0.03 0.02 -0.2 ....0.6 
Observation3 -0.2 0.05 0.1 0.4 0.3 0.02 0.3 -0.1 0.01 0.01 -0.2 ....0.1 
Observation550 -0.1 0.05 0.8 0.4 0.3 0.02 0.7 -0.1 0.01 0.01 -0.2 ....0.1 

Datenrahmen 2:

Predictions x1 x2 x3 x5 x6 x7 x8 x9 x10 x11 x13 .... x75 
Prediction1 -0.1 0.05 0.1 0.2 0.3 0.04 0.3 -0.1 0.02 0.02 -0.2 ....0.8 
Prediction2 -0.3 0.05 0.1 0.1 0.3 0.03 0.3 -0.1 0.03 0.02 -0.2 ....0.6 
Prediction3 -0.2 0.05 0.1 0.4 0.3 0.02 0.3 -0.1 0.01 0.01 -0.2 ....0.1 
Prediction550 -0.1 0.05 0.8 0.4 0.3 0.02 0.7 -0.1 0.01 0.01 -0.2 ....0.1 

Es scheint, dass ich nur einen Datenrahmen oder eine Liste mit diesen beiden Matrizen innerhalb zu schaffen, um habe ggplot() zu verwenden.

Ich habe dies getan, aber mit dem Standard-Plot r.

Vielen Dank im Voraus

+0

Wie wollen Sie die Facettierung aussehen? Ein Raster mit 76 Spalten und 550 Zeilen übertrifft jedes Ausgabegerät, das ich je gesehen habe. –

+0

Ich möchte mindestens zwei Bildschirm mit ausgewählten Zeilen anzeigen (jeder einzelne Graph ist eine Zeile mit 75 Spalten), könnte zwei Bildschirm mit sagen wir jeweils 20 Grafik sein. – FernRay

+0

Ok, ja ich sehe, dass ich es falsch verstanden habe. Gib mir ein paar Minuten –

Antwort

1

Ich denke, das ist das, was Sie wollen.

library(ggplot2) 
library(reshape2) 

# Fake some data 
set.seed(1234) 
nc <- 15 
nr <- 20 
onms <- sprintf("Observation%d",1:nr) 
pnms <- sprintf("Prediction%d",1:nr) 
cnames <- sprintf("x%d",1:nc) 

odf <- data.frame(Observations=onms) 
pdf <- data.frame(Predictions=pnms) 

for(i in 1:nc){ 
    vk1 <- 0.01*rnorm(nr) 
    odf[[cnames[i]]] <- round(cumsum(vk1),3) 
    vk2 <- 0.02*rnorm(nr) 
    pdf[[cnames[i]]] <- round(cumsum(vk1) + cumsum(vk2),3) 
} 

# This is the data we need 
head(odf) 
head(pdf) 

# Now change the pred. colnames so they don't collide with the obs. colnames 
newpnames <- sprintf("p_x%d",1:nc) 
names(pdf) <- c("series",newpnames) 
names(odf)[1] <- "series" 

# Merge the data into a long format 
modf <- melt(odf,id.vars="series",measure.vars=cnames) 
mpdf <- melt(pdf,id.vars="series",measure.vars=newpnames) 
mdf <- rbind(modf,mpdf) 

# Now extract the fields we need into new columns 
mdf$x <- as.numeric(gsub(".*[A-Za-z]","",mdf$variable)) 
mdf$frame <- as.numeric(gsub(".*[A-Za-z]","",mdf$series)) 
frameNames <- sprintf("Frame:%d",1:max(mdf$frame)) 
mdf$frame <- factor(sprintf("Frame:%d",mdf$frame),levels=frameNames) 
mdf$kind <- substr(mdf$series,1,3) 

# Finally plot it 
ggplot(mdf) + geom_line(aes(x=x,y=value,color=kind)) + facet_wrap(~ frame) 

# ecdf version 
ggplot(mdf,aes(x=value,color=kind)) + stat_ecdf(geom="step") + facet_wrap(~ frame) 

Beachten Sie, dass die head Aussagen, nachdem ich gefälschte Daten geben Sie diese, so ist dies nahe, was Sie ab Ich glaube:

> head(odf) 
    Observations  x1  x2  x3  x4  x5 x6  x7  x8  x9 
1 Observation1 -0.012 0.014 -0.002 -0.002 -0.008 0.005 0.001 -0.010 0.001 
2 Observation2 -0.009 0.004 -0.003 -0.010 -0.011 0.012 0.005 -0.005 0.002 
3 Observation3 0.002 -0.005 -0.017 0.011 -0.015 0.014 -0.006 -0.012 -0.003 
4 Observation4 -0.022 -0.008 -0.019 0.018 -0.017 0.021 0.001 -0.004 -0.019 
5 Observation5 -0.018 -0.017 -0.010 0.037 -0.013 0.024 0.008 -0.012 -0.019 
6 Observation6 -0.013 -0.027 -0.003 0.037 -0.007 0.031 0.011 -0.009 -0.026 
    x10 x11 x12 x13 x14 x15 
1 0.009 -0.012 0.005 -0.007 0.015 -0.007 
2 0.028 -0.012 0.004 0.005 0.013 -0.018 
3 0.028 -0.016 0.005 -0.012 0.026 -0.021 
4 0.027 -0.025 -0.004 -0.008 0.026 -0.020 
5 0.022 -0.021 -0.017 -0.006 0.019 -0.012 
6 0.036 -0.019 -0.003 0.026 0.011 0.001 
> head(pdf) 
    Predictions  x1 x2  x3  x4  x5 x6  x7  x8 x9 
1 Prediction1 -0.009 0.028 0.007 -0.009 -0.063 0.023 0.020 -0.022 0.000 
2 Prediction2 -0.016 0.068 -0.005 0.011 -0.068 0.043 0.017 -0.036 0.007 
3 Prediction3 -0.014 0.059 -0.017 0.045 -0.052 0.090 0.009 -0.047 0.021 
4 Prediction4 -0.029 0.042 -0.029 0.050 -0.046 0.121 -0.019 -0.018 0.028 
5 Prediction5 -0.038 0.032 -0.037 0.079 -0.024 0.130 -0.005 -0.026 0.031 
6 Prediction6 -0.062 0.058 -0.027 0.087 0.022 0.124 -0.016 -0.036 0.047 
    x10 x11 x12 x13 x14 x15 
1 -0.027 -0.037 0.007 0.012 0.023 -0.026 
2 -0.061 -0.029 -0.010 0.000 0.048 -0.027 
3 -0.073 -0.035 -0.004 -0.003 0.048 -0.023 
4 -0.045 -0.041 0.000 -0.001 0.048 -0.025 
5 -0.034 -0.024 -0.038 0.037 0.030 -0.007 
6 0.005 -0.020 -0.045 0.064 -0.002 -0.005 

Schließlich dieses Grundstück ergibt:

enter image description here

Und t seine facettierten ecdf Grundstück:

enter image description here

+0

Nun, da ich darüber nachdenke, hätte ich die gefälschten Daten Zeile für Zeile erzeugen und in den Datenrahmen mit 'rbind' anstelle von Spalte einfügen sollen. Deshalb sieht es so seltsam gemustert aus, aber es sollte dir egal sein. –

+0

Hey danke @ Mike weise, deine Antwort war wirklich nützlich. Der einzige Gedanke ist, dass meine Graphen in anderer Reihenfolge zeigen, R beschweren sich mit diesem Befehl: – FernRay

+0

mdf <- mdf [order (mdf)] und zeigt diese Fehlermeldung: Fehler in '[.data.frame' (mdf, order (mdf)): undefinierte Spalten ausgewählt Vielen Dank! – FernRay