网格排列textGrob()和ggplots。标题和字幕gridExtra

基本上,我想为grid.arrange()图添加标题和副标题。

我有plot_list,它是15个ggplots的列表,并且

tg <- textGrob('Title',gp = gpar(fontsize = 13,fontface = 'bold'))
sg <- textGrob('Subtitle',gp = gpar(fontsize = 10))

但这不起作用。我没有任何错误,但是tgsg没有出现在情节中。

grid.arrange(tg,sg,grobs = plot_list,ncol = 3)

说实话,我不是gridExtragrid的专家,所以我们将不胜感激

imagin_0707 回答:网格排列textGrob()和ggplots。标题和字幕gridExtra

changing multiple line title in multiplot ggplot2 using grid.arrange之后,我可以通过创建两个网格来完成您要求的操作,首先创建仅两个绘图,然后创建第二个带有标题,副标题和第一个网格的网格。使用合成的plot_list

df <- data.frame(v1 = rnorm(1000))
plot_list <- list()
for (i in 1:15) {
  df[,ncol(df)+1] <- rnorm(1000)
  names(df)[ncol(df)] <- paste0("V_",as.character(i))
  local({
    i <- i
    plot_list[[i]] <<- ggplot(df) + geom_point(aes_string(x = "v1",y = paste0("V_",as.character(i))))
  })
}
tg <- textGrob('Title',gp = gpar(fontsize = 13,fontface = 'bold'))
sg <- textGrob('Subtitle',gp = gpar(fontsize = 10))
margin <- unit(0.5,"line")
grided <- gridExtra::grid.arrange(grobs = plot_list,ncol = 3)
gridExtra::grid.arrange(tg,sg,grided,heights = unit.c(grobHeight(tg) + 1.2*margin,grobHeight(sg) + margin,unit(1,"null")))

grids

希望这会有所帮助!

,

您需要将tg,sg和您的图合并到一个列表中。我将指定一个布局矩阵,该矩阵可以为您提供更多控制权,并使用grid.arrange进行绘制:

首先,我们有tg,sg,我用mtcars绘制了一个3的plot_list。

library(ggplot2)
library(gridExtra)
library(grid)

tg <- textGrob('Title',gp = gpar(fontsize = 10))

plot_list <- lapply(c("drat","wt","qsec"),function(i){
  ggplot(mtcars,aes_string("mpg",i))+geom_point()
})

我们将您的地块合并到一个列表中

g = c(list(tg),list(sg),plot_list)

因此,现在tg是第一元素,sg是第二元素,您的绘图是3-5。我们指定布局:

N = length(plot_list)
laym = rbind(rep(1,N),rep(2,(3:(N+2)))
laym
     [,1] [,2] [,3]
[1,]    1    1    1
[2,]    2    2    2
[3,]    3    4    5

此矩阵将具有第一个矩阵(tg),其中1占据第一行,sg占据第二行,并且您的绘图占据第三行。如果您有其他类型的安排或列表,则可以相应地进行更改。

现在我们绘制,并使用heights = ...指定相对高度。

grid.arrange(grobs=g,layout_matrix=laym,heights=c(1,1,10))

enter image description here

,

top参数可以任意选择,但需要知道其高度才能获得正确的空间,

library(grid)
library(gridExtra)

lg <- replicate(12,ggplot2::ggplot(),simplify = FALSE)
tg <- textGrob('Title',gp = gpar(fontsize = 50,gp = gpar(fontsize = 10))

lt <- list(tg,sg)
heights <- do.call(unit.c,lapply(lt,function(.g) 1.5*grobHeight(.g)))
titles <- gtable::gtable_matrix('title',grobs = matrix(lt,ncol=1),widths = unit(1,'npc'),heights = heights)

grobHeight.gtable <- function(g) sum(g$heights)

grid.arrange(grobs = lg,top = titles)
本文链接:https://www.f2er.com/3003173.html

大家都在问