从 ggplots 列表自动组装 patchwork 图形

5
我正在尝试编写一个函数(但没有成功),该函数将自动组装使用patchwork绘制的ggplot图表列表。
该函数将接受以下输入:
  • 行数
  • 列数
  • 带有图表的主列表
使用这些输入,函数应自动构建图表结构。下面是一个示例:
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
patchwork::wrap_plots(plot_list, no_of_rows, no_of_col2) patchwork::wrap_plots(plot_list, no_of_rows, no_of_col2) - Ronak Shah
1
https://dev59.com/n2gv5IYBdhLWcg3wSe-2#51352933 - StupidWolf
2个回答

13
你可以将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)

5
如果您需要简单的网格图,可以尝试使用gridExtra 包(例如,gridExtra::grid.arrange 函数),或者更容易包装ggplots函数的ggpubr::ggarange。 如果您有一个名为plot_list 的对象,则可以尝试:
ggpubr::ggarrange(plotlist = plot_list, nrow = 2, ncol = 3, byrow = TRUE)

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

Note: 本文档中的“plot list”指的是多个子图放在同一画布上的情况。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接