나는 종종 패싯에 대한 숫자 값을 가지고 있습니다. 축 제목과 유사한 보충 제목에서 이러한 패싯 값을 해석하는 데 충분한 정보를 제공하고 싶습니다. 라벨러 옵션은 불필요한 텍스트를 많이 반복하며 더 긴 가변 제목에는 사용할 수 없습니다.
어떤 제안?
기본값 :
test<-data.frame(x=1:20, y=21:40, facet.a=rep(c(1,2),10), facet.b=rep(c(1,2), each=20))
qplot(data=test, x=x, y=y, facets=facet.b~facet.a)
내가 좋아하는 것 :
ggplot에서 할 수있는 최선의 방법 :
qplot(data=test, x=x, y=y)+facet_grid(facet.b~facet.a, labeller=label_both)
@Hendy가 나타내는 것처럼 다음과 유사합니다.
ggplot2 플롯에 보조 y 축 추가-완벽하게 만듭니다.
답변
최신 버전 ggplot2
이 gtable
내부적으로 사용 되므로 Figure를 수정하는 것은 매우 쉽습니다.
library(ggplot2)
test <- data.frame(x=1:20, y=21:40,
facet.a=rep(c(1,2),10),
facet.b=rep(c(1,2), each=20))
p <- qplot(data=test, x=x, y=y, facets=facet.b~facet.a)
# get gtable object
z <- ggplotGrob(p)
library(grid)
library(gtable)
# add label for right strip
z <- gtable_add_cols(z, unit(z$widths[[7]], 'cm'), 7)
z <- gtable_add_grob(z,
list(rectGrob(gp = gpar(col = NA, fill = gray(0.5))),
textGrob("Variable 1", rot = -90, gp = gpar(col = gray(1)))),
4, 8, 6, name = paste(runif(2)))
# add label for top strip
z <- gtable_add_rows(z, unit(z$heights[[3]], 'cm'), 2)
z <- gtable_add_grob(z,
list(rectGrob(gp = gpar(col = NA, fill = gray(0.5))),
textGrob("Variable 2", gp = gpar(col = gray(1)))),
3, 4, 3, 6, name = paste(runif(2)))
# add margins
z <- gtable_add_cols(z, unit(1/8, "line"), 7)
z <- gtable_add_rows(z, unit(1/8, "line"), 3)
# draw it
grid.newpage()
grid.draw(z)
물론 스트립 라벨을 자동으로 추가하는 함수를 작성할 수 있습니다. 의 향후 버전 ggplot2
에이 기능이있을 수 있습니다. 그래도 확실하지 않습니다.
답변
더 나은 방법이있을 수 있지만 다음을 수행 할 수 있습니다.
fac1 = factor(rep(c('a','b'),10))
fac2 = factor(rep(c('a','b'),10))
data = data.frame(x=1:10, y=1:10, fac1=fac1, fac2=fac2)
p = ggplot(data,aes(x,y)) + ggplot2::geom_point() +
facet_grid(fac1~fac2)
p + theme(plot.margin = unit(c(1.5,1.5,0.2,0.2), "cm"))
grid::grid.text(unit(0.98,"npc"),0.5,label = 'label ar right', rot = 270) # right
grid::grid.text(unit(0.5,"npc"),unit(.98,'npc'),label = 'label at top', rot = 0) # top
답변
kohske에서 설명하는 방법 외에도 추가 한 상자에 테두리를 추가 할 수 있습니다.
col=NA
…에
col=gray(0.5), linetype=1
또한 변경
fill=gray(0.5)
…에 대한
fill=grey(0.8)
과
gp=gpar(col=gray(1))
…에
gp=gpar(col=gray(0))
새 막대가 패싯 레이블과 일치하도록하려면
즉
z <- gtable_add_grob(z,
list(rectGrob(gp = gpar(col = gray(0.5), linetype=1, fill = gray(0.8))),
textGrob("Variable 1", rot = -90, gp = gpar(col = gray(0)))),
4, 8, 6, name = paste(runif(2)))