如何使用 grid.arrange 移动图例位置

lep*_*lep 5 r data-visualization ggplot2 gridextra

I\xc2\xb4m 尝试在页面中排列 4 个图,将图例放在底部中心

\n\n

我用它来获取其中一个图的图例(因为它们对于四个图来说是相同的)

\n\n
    get_legend<-function(myggplot){\n    tmp <- ggplot_gtable(ggplot_build(myggplot))\n    leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box")\n    legend <- tmp$grobs[[leg]]\n    return(legend)\n    }\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后,我从任何情节中得到图例

\n\n
   legend <- get_legend(p2)\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以对于我使用的图:

\n\n
 tt <-grid.arrange(arrangeGrob(p6, p7, p8, p9, legend,\n                          nrow = 2, #\n                          left = textGrob("Mammalian species richness", rot = 90, vjust = 1, \n                                          gp = gpar(fontsize = 12))))\n
Run Code Online (Sandbox Code Playgroud)\n\n

但我\xc2\xb4得到的是这样的:

\n\n

在此输入图像描述

\n\n

如何将图例移动到中心按钮并具有 2 行 2 列? \ncommands nrow,ncol没有工作,因为我收到了错误消息,也没有类似的东西

\n\n
tt  <- tt + theme(legend.position ="bottom"). \n
Run Code Online (Sandbox Code Playgroud)\n\n

附:以防万一这个信息很重要,如果我尝试不放置任何图例,我可以根据需要将四个图放在网格中,但没有图例,所以,你知道这不利于出版。

\n

use*_*650 5

layout_matrix您可以使用in参数grid.arrange来进行更多控制。

一个可重现的例子,

library(ggplot2)
library(gridExtra)

get_legend<-function(myggplot){
    tmp <- ggplot_gtable(ggplot_build(myggplot))
    leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box")
    legend <- tmp$grobs[[leg]]
    return(legend)
    }

p <- ggplot()
p2 <- ggplot(mtcars, aes(mpg, wt, col=factor(am))) + geom_point()
legend <- get_legend(p2)


grid.arrange(p, p, p, p, legend, 
             layout_matrix=rbind(c(1,2,3), c(4,5,5)))
Run Code Online (Sandbox Code Playgroud)

哪个产生

在此输入图像描述

或者也许你想要

grid.arrange(p, p ,p, p, legend, 
             layout_matrix=rbind(c(1,1,2,2,5), c(3,3,4,4,5)))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 非常感谢 user20650 您的回复,尽管事实上这不是一个正确的问题。它有效,我还使用layout_matrix=rbind(c(1,2), c(3,4), c(5,5))) 将其放置在按钮上。然而,右边更好,因为在按钮中有很多空间和图例仍然在两行中,并且不知道如何使其平坦......谢谢! (2认同)