第二种选择是使用 design 参数,例如design="A#B" 将在你的绘图之间添加一个间隔,当然你可以做类似paste(LETTERS[seq(length(plots_list))], collapse = "#") 的事情来以编程方式创建设计字符串。
library(ggplot2)
library(patchwork)
p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp))
p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear))
plots_list <- list(p1, p2)
design <- "A#B"
patchwork::wrap_plots(plots_list) + plot_layout(widths = c(6, -1, 6), design = design)
更新已经猜到你想要两个以上的地块。尤其是多行,这有点棘手,需要一些工作。以下是使用自定义函数根据所需行数创建design 字符串的基本方法。
library(ggplot2)
library(patchwork)
p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp))
p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear))
plots_list <- list(p1, p2, p1, p2, p1)
make_design <- function(x, nrows) {
np <- length(x)
ncols <- ceiling(np / nrows)
design <- LETTERS[seq(np)]
if (np %% 2 == 1) design <- c(design, rep("#", nrows * ncols - np))
design <- split(design, rep(seq(nrows), each = ncols))
design <- vapply(design, paste, collapse = "#", FUN.VALUE = character(1))
design <- paste(design, collapse = "\n")
return(design)
}
design <- make_design(plots_list, 3)
patchwork::wrap_plots(plots_list) + plot_layout(widths = c(6, -1, 6), design = design)
design <- make_design(plots_list, 2)
patchwork::wrap_plots(plots_list) + plot_layout(widths = c(6, -1, 6, -1, 6), design = design)