Usuwanie nieużywanych poziomów w aspektach za pomocą ggplot2 [zamknięte]

19

Czy można zrzucić poziomy, które nie są używane w aspektach ggplot2? To jest mój kod:

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

Próbowałem drop=Tprzełącznik, ale to nie pomaga. Co ja robię źle?

mrrrau
źródło
W przypadku czysto programistycznych pytań (nie statystyk), takich jak ten,
migruj

Odpowiedzi:

27

Twoje przykładowe dane po prostu nie mają żadnych nieużywanych poziomów do upuszczenia. Sprawdź zachowanie w tym przykładzie:

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

Może się zdarzyć, że chcesz zmienić, które czynniki są drukowane na osi pionowej w każdym aspekcie, w którym to przypadku chcesz ustawić scalesargument i użyć facet_wrap:

ggplot(tab, aes(names,val)) + 
    geom_point() + coord_flip() + 
    theme_bw() + 
    facet_wrap(~groups,nrow = 3,scales = "free_x")
joran
źródło
Och, teraz widzę, co robi. Moim zamiarem było wykreślenie tylko tych poziomów w każdym aspekcie, które są faktycznie pogrupowane według aspektu. Jak, przy moim przykładem kartę, dotchart(as.numeric(tab$val), labels=tab$names, groups=tab$groups). Czy to możliwe?
mrrrau,
@mrrrau Tak, zobacz moją edycję.
joran
21
Dla przyszłych czytelników, dropupuszcza wszelkie poziomy czynników, które nie były użyte w żadnym aspekcie wykresu, podczas gdy scalesopuszcza każdy poziom współczynnika, który nie był użyty w danym aspekcie wykresu. Zajęło mi to trochę czasu, aby zrozumieć ten post, więc pomyślałem, że wyjaśnię tutaj, aby ocalić komuś problem.
Jake Fisher
@JakeFisher Dzięki za zwrócenie na to uwagi! Całkiem pomocne!
Steven