正文
其实前面已经介绍两个子图组合的博客,但是看到这个patchwork包还是眼前一亮,因为它非常简单易懂且功能强大
普通功能
- 安装
# install.packages("devtools")
devtools::install_github("thomasp85/patchwork")
- 简单实例
library(ggplot2)
library(patchwork)
p1 <- ggplot(mtcars) geom_point(aes(mpg, disp))
p2 <- ggplot(mtcars) geom_boxplot(aes(gear, disp, group = gear))
p1 p2
仅仅靠' '符号便可以完成子图组合
- 可以通过添加plot_layout()调用来指定画布的布局。 可以定义网格的尺寸以及分配给不同行和列的空间大小
p1 p2 plot_layout(ncol = 1, heights = c(3, 1))
- 增加图片画布中的空白
p1 plot_spacer() p2
-可以通过将部分子图包装在括号中来制作嵌套布局。在这种情况下,画布布局的范围为不同的嵌套级别。
代码语言:javascript复制p3 <- ggplot(mtcars) geom_smooth(aes(disp, qsec))
p4 <- ggplot(mtcars) geom_bar(aes(carb))
p4 {
p1 {
p2
p3
plot_layout(ncol = 1)
}
}
plot_layout(ncol = 1)
高级功能
除了将图和布局一起添加之外,还定义了一些非常简单的运算符。 '- '功能类似' ',但将左侧和右侧放在相同的嵌套级别(而不是将右侧放入左侧嵌套级别)。
代码语言:javascript复制p1 p2 p3 plot_layout(ncol = 1)
p1 p2 - p3 plot_layout(ncol = 1)
我们可以看到现在(p1 p2)和p3处于同一水平。
- 通常我们只是想把子图简单组合。 提供了两个| 和/分别用于水平和垂直布局。 它们当然可以组合成一个非常易读的布局语法:
(p1 | p2 | p3) /
p4
- 设置子图与图片主题
(p1 (p2 p3) p4 plot_layout(ncol = 1)) * theme_bw()
p1 (p2 p3) p4 plot_layout(ncol = 1) & theme_bw()
可以使用&或将主题添加到所有子图中,而不是单独修改所有图。 两者的不同之处在于只会影响当前嵌套级别的图,&影像所有子图。