2012-10-15 16 views
11

So weit ich sagen kann facet_wrap füllt durch Reihe. Auf die gleiche Art und Weise können Sie angeben, wie Sie eine matrix mit byrow füllen Ich hatte gehofft, Sie könnten das gleiche mit facet_wrap tun. Ich weiß, dass ich die Ebenen eines Faktors neu anordnen könnte, um in dieser Manier zu plotten, aber das scheint ein bisschen Arbeit zu sein, wenn es eine kürzere Methode gibt, die ich übersehe.facet_wrap füllen durch Spalte

library(ggplot2) 

ggplot(mtcars, aes(x=gear, y=mpg, fill=vs)) + 
    geom_bar(position="dodge", stat="identity") + 
    facet_wrap(~ carb, ncol=2) #fills by row 

Wie können wir Spalten ausfüllen?

+0

Gute Frage. Posten Sie es als Feature-Anfrage für Winston auf dem 'ggplot2' [Repo] (https://github.com/hadley/ggplot2/issues?labels=feature&page=1&state=open). :) – Maiasaura

+0

Erledigt: https://github.com/hadley/ggplot2/issues/695 –

+0

Obwohl vielleicht habe ich die Anfrage an der falschen Stelle hinzugefügt, da der Link nicht zu Ihnen passt. –

Antwort

4

Es kann getan werden, indem facettierende Variable in factor konvertiert und dann neu nivelliert wird. In der Funktion relevel.byrow habe ich matrix(..., byrow=T) für die Ebenenreihenfolge verwendet, dann diese Matrix in einen Vektor umgewandelt unter Verwendung der c()-Funktion und dann den neu nivellierten Faktor.

#number of columns 
nc <- 2 
level.byrow <- function(vec, nc){ 
    fac <- factor(vec) #if it is not a factor 
    mlev <- matrix(levels(fac), nrow=nc, byrow=T) 
    factor(fac, levels= c(mlev)) 
} 

library(plyr) 
ggplot(transform(mtcars, rcarb=level.byrow(carb, nc)), aes(x=gear, y=mpg, fill=vs)) + 
    geom_bar(position="dodge", stat="identity") + 
    facet_wrap(~ rcarb, ncol=nc) 

I verwendet plyr für Bequemlichkeit, können Sie einfach nur

mtcars$rcarb <- level.byrow(mtcars$carb, nc) 

schreiben Dies funktioniert auch, wenn wir nicht in voller Facettenstruktur haben, sondern gibt paar Warnungen.

mtcars2 <- subset(mtcars, carb!=3) 
ggplot(transform(mtcars2, rcarb=level.byrow(carb, nc)), aes(x=gear, y=mpg, fill=vs)) + 
    geom_bar(position="dodge", stat="identity") + 
    facet_wrap(~ rcarb, ncol=nc) 

Ergebnis mit carb==3 ausgeschlossen:

enter image description here

+0

Es klingt, als wäre die Option nach Spalte für facet_wrap nicht verfügbar. Diese Lösung leidet unter einer Neuanordnung von Ebenen und daher sollte eine neue Variable erstellt werden, um das Original zu erhalten. Nicht ideal, aber ich denke, dass die beste Arbeit gerade jetzt ist. Danke für deinen Gedanken. –

4

Diese Funktion in der aktuellen Entwicklungsversion von ggplot2 auf Github umgesetzt wird. This commit implementiert ein neuer Parameter dir von facet_wrap, so dass Sie würde einfach tun

## "v" for vertical or "h" for horizontal (the default)  
ggplot(...) + facet_wrap(~ carb, ncol=2, dir="v") 

Beachten Sie, dass diese Funktion derzeit in der Version auf CRAN nicht verfügbar ist.

+0

Dies ist die aktuelle ideale Lösung wegen der einfachen Implementierung. Der 'dir' Parameter zu' facet_wrap() 'ist jetzt Teil der CRAN ggplot2 Version. – Megatron

Verwandte Themen