2016-03-24 6 views
4

Also, ich versuche, ein Raster von Plots zu machen, die durch drei verschiedene Variablen facettiert sind. Ich kann das Gitter der Plots ganz gut erzeugen, die einzige Schwierigkeit, die ich habe, ist, dass die Reihenfolge, in der die Labels platziert werden, nicht in Ordnung ist. Hier ist ein einfaches Beispiel dafür, was ich tue:Verschachtelte Facetten-Labels in facet_grid bestellen

library(ggplot2) 
data(mtcars) 
qplot(mpg, wt, data=mtcars) + facet_grid(cyl +am ~ vs, labeller = label_both) 

, die folgende Handlung erzeugt:

enter image description here

Nun, zum größten Teil, sieht das Grundstück groß, aber für die Etiketten auf Auf der rechten Seite sehen wir, dass cyl mit "first" (dh in der Nähe der Handlung) und am ist verschachtelt außerhalb, aber die Art, wie die Handlung ausgelegt ist, ist klar, dass die Facetten mit angezeigt werden bin verschachtelt mit hin cyl.

So würde Ich mag die Reihenfolge ändern, dass die Etiketten aufgeführt sind, so dass Uhr Ebenen innerhalb Zyl Ebenen aufgeführt sind, um das Layout zu reflektieren. Ich habe versucht, nach Dingen wie "facet_grid order labels" oder "nested facet label order ggplot2" zu suchen, aber fast alle Ergebnisse, die ich gefunden habe, hatten damit zu tun, die Reihenfolge der tatsächlichen Ebenen einer bestimmten Facette zu ändern, anstatt das Problem Ich habe es beschrieben. Außerdem habe ich versucht, an der Etikettiermaschine zu basteln, aber diese Funktion scheint nach der Platzierung der Etiketten aufgerufen zu sein.

Danke für Ihre Hilfe!

+0

die Formel Neuordnen scheinen Ihnen zu geben das umgekehrte Problem, so dass es wie eine Kuriosität von "Label_both" aussieht. Sie könnten Ihren eigenen Etikettierer schreiben, wenn Sie möchten. – alistaire

+0

@alistaire Ich glaube nicht, dass es sich um ein Label-Problem handelt, da ich ursprünglich label_both nicht verwendet habe (es wurde für die Klarheit der Handlung hinzugefügt), aber die Labels erschienen immer noch in der gleichen Reihenfolge. – Vindel

Antwort

2

Es scheint, dass die Bestellung der Etiketten, die Sie sehen, nur der Standard Weg ist, wie ggplot bestellt die Etiketten. Wenn Sie die Reihenfolge der Variablen in der Formel austauschen, ändern sich die Etiketten auch Position, aber dies zugleich neu ordnet auch die Zeilen, die wahrscheinlich nicht das, was Sie wollen:

qplot(mpg, wt, data=mtcars) + 
    facet_grid(am + cyl ~ vs, labeller = label_both) 

enter image description here

Sie kann in der Tat den Etikettierer verwenden, um dies zu beheben, wie von Alistaire vorgeschlagen wurde. Die folgende Funktion ruft label_both() mit den Spalten des Datenrahmens Label in umgekehrter Reihenfolge:

label_rev <- function(labels, multi_line = TRUE, sep = ": ") { 
    label_both(rev(labels), multi_line = multi_line, sep = sep) 
} 

Und es führt zu dem gewünschten Ergebnis:

qplot(mpg, wt, data=mtcars) + 
    facet_grid(cyl + am ~ vs, labeller = label_rev) 

enter image description here

+1

Danke für die tolle Antwort! – Vindel