2016-03-24 17 views
2

sagen, dass ich diese Daten haben:Nested facet_wrap() in ggplot2

set.seed(100) 
mydf<- 
data.frame(
day = rep(1:5, each=20), 
id = rep(LETTERS[1:4],25), 
x = runif(100), 
y = sample(1:2,100,T) 
) 

Wenn ich will nur alle fünf Tage id=="A" plotten mit facet_wrap(), tun wir so:

ggplot(mydf[mydf$id=="A",], aes(x,y)) + 
     geom_tile() + 
     facet_wrap(~day,ncol=1) 

Gibt: enter image description here

Aber wenn ich vier von diesen nebeneinander automatisch in einem 2x2 Raster (dh mit A, B, C, D) plotten möchte, ist das möglich Verwenden Sie eine verschachtelte Facette? Ich habe versucht, mehrere Variablen in der Funktion wie folgt vorgehen:

ggplot(mydf, aes(x,y)) + 
    geom_tile() + 
    facet_wrap(~ day+id) 

aber das gibt dies:

enter image description here

Ich bin für eine verschachtelte Ansatz suchen. Fünf facettierte Zeilen pro Tag in jedem Panel mit jedem Diagramm in Spalten/Zeilen nach ID. Offensichtlich für eine kleine Anzahl von Plots konnte ich einzeln speichern und mit grid.arrange etc. arrangieren, aber in den echten Daten habe ich viele Plots also so automatisieren wollen wenn möglich.

EDIT:

Als Antwort auf Kommentar - das ist die Art der gewünschten Ausgabe:

enter image description here

+4

Ich glaube, Sie suchen 'facet_grid (Tag ~ id)' – Jaap

+0

@ProcrastinatusMaximus, die nicht die erforderliche Leistung zu erzeugen scheint - es entsteht ein Raster/Platte von fünf Zeilen und vier Spalten. Ich versuche, zwei Zeilen von zwei Plots (in diesem Beispiel) mit der Zeile facet_wrapped wie im Beispiel "A" zu erhalten. – jalapic

Antwort

2

versuchen dies,

p <- ggplot(mydf, aes(x,y)) + 
    geom_tile() + 
    facet_wrap(~ day, ncol=1) 

library(plyr) 
lp <- dlply(mydf, "id", function(d) p %+% d + ggtitle(unique(d$id))) 
library(gridExtra) 
grid.arrange(grobs=lp, ncol=2) 

enter image description here

2

Hier ist ein kurzer Versuch mit der multiplot Funktion gefunden here

ids = levels(as.factor(mydf$id)) 
p = vector("list", length(ids)) 
names(p) = ids 

for(i in 1:length(ids)){ 
    p[[i]] = ggplot(mydf[mydf$id == ids[i],], aes(x,y)) + geom_tile() + ggtitle(paste(ids[i])) + facet_wrap(~day, ncol=1) 
} 

multiplot(p$A, p$B, p$C, p$D, cols = 2) 

enter image description here

Verwandte Themen