首页 > 解决方案 > 网格排列 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)

老实说,我不是专家,gridExtra所以grid任何建议都将不胜感激

标签: rggplot2gridgridextragrob

解决方案


使用 grid.arrange 更改 multiplot ggplot2 中的多行标题之后,我可以通过创建两个网格来完成您所要求的操作,首先只有绘图,第二个使用标题、副标题和第一个网格。使用合成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")))

网格

希望这可以帮助!


推荐阅读