ggplot2를 사용하여 패싯에서 사용되지 않은 레벨 삭제


19

ggplot2s 패싯에 사용되지 않는 레벨을 제거 할 수 있습니까? 이것은 내 코드입니다.

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

drop=T스위치를 사용해 보았지만 도움이되지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?


순수 프로그래밍 (안 통계)이 같은 질문은 StackOverflow의 마이그레이션하십시오
SMCI

답변:


27

예제 데이터에는 사용하지 않을 수준이 없습니다. 이 예제에서 동작을 확인하십시오.

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

각 패싯의 세로 축에 어떤 요소가 플로팅되는지 변경하려고 할 수 있습니다.이 경우 scales인수 를 설정 하고 사용 하려고 합니다 facet_wrap.

ggplot(tab, aes(names,val)) + 
    geom_point() + coord_flip() + 
    theme_bw() + 
    facet_wrap(~groups,nrow = 3,scales = "free_x")

오, 이제 그게 뭔지 봅니다. 내 의도는 모든 패싯에서 실제로 패싯별로 그룹화 된 레벨 만 플로팅하는 것이 었습니다. 내 탭 예제를 사용하는 것처럼 dotchart(as.numeric(tab$val), labels=tab$names, groups=tab$groups). 가능합니까?
mrrrau

@mrrrau 예, 편집 내용을 참조하십시오.
joran

21
미래 독자들을 위해 , 플롯의 어떤 패싯 drop에서 사용되지 않은 모든 요인 수준을 삭제 하고 플롯 의 특정 패싯에서 사용되지 않은 모든 요인 수준을 삭제합니다. 이 게시물에서 이해하는 데 시간이 조금 걸렸으므로 다른 사람에게 문제를 해결하기 위해 여기에서 명확히 할 것이라고 생각했습니다. scales
Jake Fisher

@JakeFisher 이것을 지적 해 주셔서 감사합니다! 매우 도움이되었습니다!
Steven
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.