Descartando níveis não utilizados em facetas com o ggplot2 [fechado]

19

É possível descartar níveis que não são usados ​​nas facetas do ggplot2s? Este é o meu 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")

Eu tentei o drop=Tinterruptor, mas isso não ajuda. O que estou fazendo de errado?

mrrrau
fonte
Para a programação pura (não stats) perguntas como esta, por favor migrar para StackOverflow
SMCI

Respostas:

27

Seus dados de exemplo simplesmente não têm níveis não utilizados para serem eliminados. Verifique o comportamento neste exemplo:

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

Pode ser que você esteja procurando alterar quais fatores estão plotando no eixo vertical em cada faceta; nesse caso, você deseja definir o scalesargumento e usar facet_wrap:

ggplot(tab, aes(names,val)) + 
    geom_point() + coord_flip() + 
    theme_bw() + 
    facet_wrap(~groups,nrow = 3,scales = "free_x")
joran
fonte
Oh, agora vejo o que faz. Minha intenção era traçar apenas os níveis em todas as facetas, que são realmente agrupados pela faceta. Como, usando o meu exemplo de guia dotchart(as.numeric(tab$val), labels=tab$names, groups=tab$groups),. É possível?
Mrrrau 17/03/12
@mrrrau Sim, veja minha edição.
joran
21
Para futuros leitores, dropreduz qualquer nível de fator que não foi usado em nenhuma faceta da plotagem, enquanto scalesreduz qualquer nível de fator que não foi usado em uma faceta específica da plotagem. Demorei um pouco para entender a partir deste post, então pensei em esclarecer aqui para salvar o problema de outra pessoa.
Jake Fisher
@JakeFisher Obrigado por apontar isso! Bastante útil!
21417 Steven