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?


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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.