Non sono sicuro di come farlo con una funzione etichettatrice, ma un'altra opzione è creare una variabile di raggruppamento che combini tutte e tre le variabili categoriali in una singola variabile che può essere utilizzata per la sfaccettatura. Ecco un esempio che utilizza il frame di dati integrato mtcars
e il pacchetto dplyr
per creare al volo la nuova variabile di raggruppamento. Di seguito si tratta di un aggiornamento con una funzione che consente la scelta dinamica da una a tre variabili di sfaccettatura.
library(dplyr)
ggplot(mtcars %>% mutate(group = paste(cyl,am,vs, sep="-")),
aes(wt,mpg)) +
geom_point() +
facet_wrap(~group)
UPDATE: quanto riguarda il commento di flessibilità, il codice qui sotto è una funzione che permette all'utente di inserire il frame di dati desiderato e nomi di variabili, tra cui la scelta in modo dinamico per sfaccettatura su uno, due o tre colonne.
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)
}
Ora proviamo la funzione:
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")
Grazie, questo funziona sicuramente. Tuttavia, mi piacerebbe scoprire se c'è un modo per farlo usando i parametri ggplot2. Potrei voler sfaccettare i miei diagrammi usando variabili diverse e vorrei anche evitare la ridondanza nella mia tabella di dati che è già enorme. – beeprogrammer
Vedere la risposta aggiornata. Si noti inoltre che il codice non aggiunge alcuna colonna all'oggetto del frame di dati. La colonna extra viene aggiunta solo all'interno della funzione ggplot e non altera l'oggetto frame dati stesso. – eipi10