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?


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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.