Suppression des niveaux inutilisés dans les facettes avec ggplot2 [fermé]

19

Est-il possible de supprimer des niveaux qui ne sont pas utilisés dans les facettes ggplot2s? Voici mon code:

tab = as.data.frame(cbind(groups = mtcars$cyl, names = row.names(mtcars), val = mtcars$mpg, N = mtcars$disp))
tab$N = as.numeric(tab$N)

ggplot(tab, aes(names,val)) + 
geom_point() + coord_flip() + 
theme_bw() + 
facet_grid(groups ~ ., drop=TRUE)#, scales="free", as.table=F, space="free")

J'ai essayé le drop=Tcommutateur mais cela n'aide pas. Qu'est-ce que je fais mal?

mrrrau
la source
Pour des questions de programmation pure (pas de statistiques) comme celle-ci, veuillez migrer vers StackOverflow
smci

Réponses:

27

Vos données d'exemple n'ont tout simplement aucun niveau inutilisé à supprimer. Vérifiez le comportement dans cet exemple:

dat <- data.frame(x = runif(12),
                  y = runif(12),
                  grp1 = factor(rep(letters[1:4],times = 3)),
                  grp2 = factor(rep(LETTERS[1:2],times = 6)))

levels(dat$grp2) <- LETTERS[1:3]

ggplot(dat,aes(x = x,y = y)) + 
    facet_grid(grp1~grp2,drop = FALSE) + 
    geom_point()

ggplot(dat,aes(x = x,y = y)) + 
    facet_grid(grp1~grp2,drop = TRUE) + 
    geom_point()

Il se peut que vous cherchiez à changer les facteurs qui tracent sur l'axe vertical dans chaque facette, auquel cas vous souhaitez définir l' scalesargument et utiliser facet_wrap:

ggplot(tab, aes(names,val)) + 
    geom_point() + coord_flip() + 
    theme_bw() + 
    facet_wrap(~groups,nrow = 3,scales = "free_x")
joran
la source
Oh je vois maintenant ce que ça fait. Mon intention était de tracer uniquement ces niveaux dans chaque facette, qui sont en fait regroupés par la facette. Comme, en utilisant mon exemple onglet, dotchart(as.numeric(tab$val), labels=tab$names, groups=tab$groups). C'est possible?
mrrrau
@mrrrau Oui, voir ma modification.
joran
21
Pour les futurs lecteurs, dropsupprime tous les niveaux de facteur qui n'ont pas été utilisés dans aucune facette de l'intrigue, tandis que scalessupprime tout niveau de facteur qui n'a pas été utilisé dans une facette particulière de l'intrigue. Cela m'a pris du temps pour comprendre ce post, alors j'ai pensé clarifier ici pour éviter à quelqu'un d'autre le problème.
Jake Fisher
@JakeFisher Merci de l'avoir signalé! Très utile!
Steven