Caída de niveles no utilizados en facetas con ggplot2 [cerrado]

19

¿Es posible eliminar niveles que no se usan en las facetas de ggplot2s? Este es mi código:

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

Intenté el drop=Tcambio pero no ayuda. ¿Qué estoy haciendo mal?

mrrrau
fuente
Para preguntas de programación pura (no estadísticas) como esta, migre a StackOverflow
smci

Respuestas:

27

Sus datos de ejemplo simplemente no tienen ningún nivel no utilizado para eliminar. Verifique el comportamiento en este ejemplo:

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

Puede ser que esté buscando cambiar qué factores están trazando en el eje vertical en cada faceta, en cuyo caso desea establecer el scalesargumento y usar facet_wrap:

ggplot(tab, aes(names,val)) + 
    geom_point() + coord_flip() + 
    theme_bw() + 
    facet_wrap(~groups,nrow = 3,scales = "free_x")
joran
fuente
Oh, ahora veo lo que hace. Mi intención era trazar solo esos niveles en cada faceta, que en realidad están agrupados por la faceta. Al igual que, usando mi pestaña ejemplo, dotchart(as.numeric(tab$val), labels=tab$names, groups=tab$groups). ¿Es posible?
mrrrau
@mrrrau Sí, mira mi edición.
joran
21
Para futuros lectores, dropelimina cualquier nivel de factor que no se usó en ninguna faceta de la trama, mientras que scaleselimina cualquier nivel de factor que no se utilizó en una faceta particular de la trama. Esto me llevó un tiempo entender de esta publicación, así que pensé en aclarar aquí para salvar a alguien más del problema.
Jake Fisher
@JakeFisher ¡Gracias por señalar esto! ¡Bastante util!
Steven