patchwork
patchwork适合用于图数少,但需要精准控制图片排列的场景。拼图语法如下:
-
+:最简单的拼图,默认横向排列,若有多个图,会自动计算最佳的行和列;plot_spacer()代表空白
p1 + plot_spacer() +
p2 + plot_spacer() +
p3 + plot_spacer()

-
/:上下拼图;|:左右拼图;用/和|配以()可以实现更加复杂的拼图
(p2 / p3 ) | p1

-
plot_layout():控制细节
p1 + p2 + p3 + p4 +
plot_layout(widths = c(3, 1))

- 自定义拼图
layout <- "
##BBBB
AACCDD
##CCDD
"
p1 + p2 + p3 + p4 +
plot_layout(design = layout)

ggpubr::ggarrange()
ggpubr::ggarrange适合更多图的组合,可以直接指定行数和列数,默认按行排列
例如:
ggpubr::ggarrange(plotlist = list(p1,p2,p3,p1,p2,p3),nrow = 2,ncol = 3,common.legend = T)

aplot::insert_*
这个函数族包括aplot::insert_bottom()、aplot::insert_left()、aplot::insert_right()、aplot::insert_top()。我通常用于单张复杂图的绘制。但缺点是返回的对象不是ggplot对象,进行后续操作会比较麻烦。
p1 %>% insert_top(p2,height = 0.2) %>% insert_right(p3,0.2)
