2013-08-05 4 views
5

패싯 헤더가 아래쪽에 나타나고 패싯 상단에 x 축이 표시되도록 한 행과 5 열 패싯 패널의 레이블을 뒤집기를 원합니다.패싯 레이블과 x 축을 ggplot2로 뒤집기

그 이유는 그래프 바로 아래에있는 테이블에 해당 헤더를 다시 사용하기 위해서입니다.

그래서이 예에서는

...

library(ggplot2) 

my.hist<-ggplot(diamonds, aes(clarity)) + geom_bar() 

my.hist + facet_wrap(~ cut, ncol=5) + coord_flip() 

나는 "컷"레이블이 차트 아래에 표시 할 것입니다. facet_grid가 키를 잡을 수 있다고 생각했지만 추측 일뿐입니다.

누구든지이 작업을 수행하는 방법을 알고 있습니까? 줄거리는 간단합니다 아래

+1

이 질문에 대한 답변이 [this] (http://stackoverflow.com/q/3261597/324364) 또는 [t 그의] (http://stackoverflow.com/q/10058839/324364). – joran

+0

나쁜 소식처럼 보입니다 ... 아마도 주제에서 벗어나지 만 격자가이 기능을 제공하는지 궁금합니다. – wesmantooth

답변

7

하나는 눈금 및 레이블의 위치를 ​​반전하기 때문에

library(gtable) 
g <- ggplotGrob(p) 

strips <- gtable_filter(g, "strip_t", trim=FALSE) 
grid.newpage() 
grid.draw(rbind(g, strips[3,], size="first")) 

축, 그러나 더 많은주의를 필요로 패싯 스트립 얻기. 당신은 아마

tweak_axis <- function(a){ 
    inner <- a[["children"]]["axis"][[1]] 
    inner[["grobs"]] <- rev(inner[["grobs"]]) 
    inner$grobs[[2]]$y <- inner$grobs[[2]]$y - unit(0.15, "cm") 
    a[["children"]]["axis"][[1]] <- inner 
    a 
} 

axes <- gtable_filter(g, "axis_b", trim=FALSE) 
axes$grobs <- lapply(axes$grobs, tweak_axis) 
grid.newpage() 
grid.draw(axes) 

편집이 시작 할 수 있습니다, 위의 기반으로 "완전한"솔루션이 될 수있다 (명백한 사항에 유의)

grid.newpage() 
g2 <- g 
new_axes <- lapply(g2$grobs[grepl("axis_b", g2$layout$name)], tweak_axis) 
g$grobs[grepl("strip_t", g$layout$name)] <- new_axes 
g$grobs[grepl("axis_b", g$layout$name)] <- g2$grobs[grepl("strip_t", g2$layout$name)] 
# heights should be changed too, but it's kind of ok here 
xlab <- 7; title <- 1:2 
grid.draw(rbind(g[xlab,], g[-c(title, xlab), ], size="last")) 

enter image description here

+1

kohske 축에 대한 몇 가지 트릭을 출판했습니다 : http://rpubs.com/kohske/dual_axis_in_ggplot2 – baptiste

+0

''strip_t "'를 사용하고''strips'을 실행하면 출력'TableGrob (6 x 5)"레이아웃을 얻습니다 : 0 grobs'. 이것은 의도 된 효과입니까? 나는 최종 출력물에 오류가 발생했기 때문에 "오류 유형 mmm <각 :이 유형의 비교가 구현되지 않았습니다"라고 묻습니다. 그러나, 나는 당신의 코드에서'p'를 광산에서'my.plot'로 대체하려고합니다. 이것이 올바른 사용법입니까? – wesmantooth

+1

그 gtable에 5 개의 grobs가 있어야하며,'p'는 두 번째 줄 ('facet_wrap')을 포함하도록 업데이트 된 플롯이어야합니다. 다른 오류를 처리하도록 코드를 업데이트했습니다. – baptiste

관련 문제