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)
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")
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
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