2016-05-10 15 views
10

ich facet_wrap bin mit meiner Streudiagramm zu spalten alsggplot2: Setzen multivariable facet_wrap Etiketten auf einer Linie

facet_wrap(x~y+z) 

Diese 22 Grundstücke in meinem Fall erzeugt, wie gewünscht. Die Beschriftung für jedes dieser 22 Plots wird jedoch in drei Reihen (x, y und z) angezeigt, wodurch der Platz im Fenster unnötig verzehrt wird und die Plots in einen kleinen Bereich gequetscht werden. Ich möchte lieber, dass meine Parzellen größer werden. Da die Variablen y und z kurz sind, möchte ich sie in derselben Zeile statt in zwei anzeigen.

Ich schaute in die Etikettierer-Optionen, aber keiner von ihnen scheint zu tun, was ich wollen würde. Ich würde mich über Vorschläge hier freuen.

Antwort

9

In diesem Fall können Sie auch label_wrap_gen() interessieren könnten:

p <- ggplot(mtcars, aes(wt,mpg)) + geom_point() 
p + facet_wrap(cyl~am+vs, labeller = label_wrap_gen(multi_line=FALSE)) 

Für weitere Informationen siehe auch here und here .

6

Ich bin mir nicht sicher, wie dies mit einer Bezeichnerfunktion funktioniert, aber eine andere Möglichkeit besteht darin, eine Gruppierungsvariable zu erstellen, die alle drei kategorialen Variablen zu einer einzigen Variablen zusammenfasst, die für die Facettierung verwendet werden kann. Hier sehen Sie ein Beispiel mit dem integrierten Datenrahmen mtcars und dem Paket dplyr zum Erstellen der neuen Gruppierungsvariablen im laufenden Betrieb. Danach folgt ein Update mit einer Funktion, die die dynamische Auswahl von einer bis drei Facettenvariablen erlaubt.

library(dplyr) 

ggplot(mtcars %>% mutate(group = paste(cyl,am,vs, sep="-")), 
     aes(wt,mpg)) + 
    geom_point() + 
    facet_wrap(~group) 

enter image description here

UPDATE: den Kommentar über Flexibilität in Bezug auf, ist der folgende Code eine Funktion, die dem Benutzer erlaubt, die gewünschte Datenrahmen und Variablennamen einzugeben, einschließlich dynamisch auf einer Facette der Auswahl, zwei oder drei Spalten.

library(dplyr) 
library(lazyeval) 

mygg = function(dat, v1, v2, f1, f2=NA, f3=NA) { 

    dat = dat %>% 
    mutate_(group = 
       if (is.na(f2)) { 
       f1 
       } else if (is.na(f3)) { 
       interp(~paste(f1,f2, sep='-'), f1=as.name(f1), f2=as.name(f2)) 
       } else { 
       interp(~paste(f1,f2,f3,sep='-'), f1=as.name(f1), f2=as.name(f2), f3=as.name(f3)) 
       }) 

    ggplot(dat, aes_string(v1,v2)) + 
    geom_point() + 
    facet_wrap(~group) 
} 

Nun wollen wir die Funktion ausprobieren:

library(vcd) # For Arthitis data frame 

mygg(Arthritis, "ID","Age","Sex","Treatment","Improved") 
mygg(mtcars, "wt","mpg","cyl","am") 
mygg(iris, "Petal.Width","Petal.Length","Species") 

enter image description here

+0

Danke, das funktioniert sicher. Ich würde jedoch gerne herausfinden, ob es einen Weg gibt, dies mit ggplot2-Parametern zu tun. Ich möchte vielleicht meine Diagramme mit verschiedenen Variablen facet_wrap und möchte auch Redundanz in meiner Datentabelle, die bereits riesig ist, vermeiden. – beeprogrammer

+1

Siehe aktualisierte Antwort. Beachten Sie auch, dass der Code dem Datenrahmenobjekt keine Spalten hinzufügt. Die zusätzliche Spalte wird nur innerhalb der Funktion ggplot hinzugefügt und ändert das Datenrahmenobjekt selbst nicht. – eipi10

Verwandte Themen