J'utilise facet_wrap pour diviser mon nuage de points comme
facet_wrap(x~y+z)
Cela génère 22 parcelles dans mon cas comme souhaité. Cependant, l'étiquette pour chacun de ces 22 graphiques est affichée sur 3 lignes (x, y et z), ce qui consomme inutilement l'espace dans la fenêtre et écrase les graphiques dans une petite zone. Je préférerais que mes parcelles soient plus grandes. Étant donné que les variables y et z sont courtes, je voudrais les afficher dans la même ligne au lieu de deux.
J'ai examiné les options d'étiqueteuse, mais aucune ne semble faire ce que je voudrais. J'apprécierais toute suggestion ici.
Je ne sais pas comment faire cela avec une fonction d'étiqueteuse, mais une autre option consiste à créer une variable de regroupement qui combine vos trois variables catégorielles en une seule variable qui peut être utilisée pour le facettage. Voici un exemple utilisant le cadre de données mtcars
intégré et le package dplyr
pour créer la nouvelle variable de regroupement à la volée. Ensuite, une mise à jour avec une fonction qui permet le choix dynamique d'une à trois variables de facettes.
library(dplyr)
ggplot(mtcars %>% mutate(group = paste(cyl,am,vs, sep="-")),
aes(wt,mpg)) +
geom_point() +
facet_wrap(~group)
MISE À JOUR: En ce qui concerne le commentaire sur la flexibilité, le code ci-dessous est une fonction qui permet à l'utilisateur d'entrer la trame de données et les noms de variables souhaités, y compris le choix dynamique de facette sur une, deux ou trois colonnes.
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)
}
Essayons maintenant la fonction:
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")