使用网格排列时添加 X 轴
Adding a X axis when using grid arrange
当我使用 grid.arrange
时,我在增加尺寸和为 x 轴添加标签时遇到问题。
我在这里问了一个问题,答案很充分,我接受了。
在代码的最后,我应该像这样将三个部分粘在一起
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))
我想为它添加一个标签,但找不到执行此操作的方法。我也搜索了一下,只找到一个相关的 post
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)
但是问题并没有解决。知道如何为其添加这样的标签吗?
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)))
编辑:也许控制边距最简单的方法是将 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))
当我使用 grid.arrange
时,我在增加尺寸和为 x 轴添加标签时遇到问题。
我在这里
在代码的最后,我应该像这样将三个部分粘在一起
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))
我想为它添加一个标签,但找不到执行此操作的方法。我也搜索了一下,只找到一个相关的 post 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)
但是问题并没有解决。知道如何为其添加这样的标签吗?
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)))
编辑:也许控制边距最简单的方法是将 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))