使用网格时添加X轴排列

时间:2016-12-28 19:07:25

标签: r ggplot2 gridextra

当我使用grid.arrange时,我遇到了增加大小并为x轴添加标签的问题。

我在这里问了一个问题how can I make my data side by side barplot with dots,答案是充分的,我接受了。

在代码的最后,我应该将这三个部分粘合在一起

library(gridExtra) 
gg1 <- ggplot_gtable(ggplot_build(g1)) 
gg2 <- ggplot_gtable(ggplot_build(g2)) 
gg.mid <- ggplot_gtable(ggplot_build(g.mid)) 

grid.arrange(gg1,gg.mid,gg2,ncol=3,widths=c(4/9,1/9,4/9))

我想为它添加一个Label,但我找不到办法来做到这一点。我也搜索过,我发现只有一个相关的帖子 Universal x axis label and legend at bottom using grid.arrange

我尝试将grid.arrange分配给变量然后

p <- grid.arrange(gg1,gg.mid,gg2,ncol=3,widths=c(4/9,1/9,4/9))
p <- arrangeGrob(p, textGrob("my label", gp=gpar(fontsize=12)))
print(p)

但问题没有解决。知道如何为它添加这样的标签吗?

1 个答案:

答案 0 :(得分:2)

g1 <- g.mid <- g2 <- ggplot()

grid.arrange(g1,g.mid,g2,ncol=3,widths=c(4/9,1/9,4/9), 
             bottom=textGrob("x axis title", gp=gpar(fontsize=22)))

enter image description here

编辑:控制边距的最简单方法可能是将grob包装在3x3 gtable中,

titleGrob <- function(label, margin=unit(c(b=5, l=0, t=2, r=0), "line"), ..., debug=FALSE){
  library(gtable)
  tg <- textGrob(label, ...)
  w <- grobWidth(tg)
  h <- grobHeight(tg)

  g <- gtable("title",
              widths = unit.c(margin[2], w, margin[4]), 
              heights = unit.c(margin[3], h, margin[1]), respect = FALSE)
  if(debug){
    rg <- rectGrob()
    pos <- expand.grid(x=1:3, y=1:3)[-5,]
    g <- gtable_add_grob(g, list(rg, rg, rg, rg, rg, rg, rg, rg), t=pos$y, l=pos$x)
  }
  gtable_add_grob(g, tg, t=2, l = 2)
}

grid.arrange(g1,g.mid,g2,ncol=3,widths=c(4/9,1/9,4/9),
             bottom=titleGrob("x axis title", gp=gpar(fontsize=22), debug=FALSE))

enter image description here