0

我正在尝试锻炼一个功能(没有任何成功),它将自动组装一个 ggplots 图列表patchwork

该函数将接受以下输入:

  • no_of_rows
  • no_of_cols
  • master_list_with_plots

使用您的输入,该功能应自动构建绘图。我在下面提供了一个示例:

library(tidyverse)
library(patchwork)
  
p1 <- mtcars %>% ggplot() + geom_bar(aes(mpg))
p2 <- mtcars %>% ggplot() + geom_bar(aes(cyl))
p3 <- mtcars %>% ggplot() + geom_bar(aes(disp))
p4 <- mtcars %>% ggplot() + geom_bar(aes(hp))
p5 <- mtcars %>% ggplot() + geom_bar(aes(drat))                                   
p6 <- mtcars %>% ggplot() + geom_bar(aes(wt))

plot_list <- list(mpg  = p1,
                  cyl  = p2,
                  disp = p3,
                  hp   = p4,
                  drat = p5,
                  wt   = p6)

# Function inputs
no_of_rows = 2
no_of_col2 = 3
master_list_with_plots = org_plot
    
#Function output would be org_plot below
org_plot <- plot_list[["mpg"]] + plot_list[["cyl"]] + plot_list[["disp"]] + 
            plot_list[["hp"]]  + plot_list[["drat"]] + plot_list[["wt"]] 

有任何想法吗?

4

2 回答 2

5

您可以patchwork::wrap_plots输入一个函数:

plot_a_list <- function(master_list_with_plots, no_of_rows, no_of_cols) {

  patchwork::wrap_plots(master_list_with_plots, 
                        nrow = no_of_rows, ncol = no_of_cols)
}

plot_a_list(plot_list, 2, 3)
于 2021-03-18T11:57:19.420 回答
2

如果它是您正在寻找的一个简单的绘图网格,请尝试查看包gridExtra(类似 的函数gridExtra::grid.arrange),或更简单的 ggplots 函数的包装器,称为ggpubr::ggarange. 鉴于您的plot_list对象,您可以尝试:

ggpubr::ggarrange(plotlist = plot_list, nrow = 2, ncol = 3, byrow = TRUE)

byrow = TRUE是默认值。将此设置为FALSE将按列排列您的绘图列表。

于 2021-03-18T10:04:24.613 回答