图形组合R包patchwork
平常我们绘制图形的时候常常要将几幅图形组合在一起,有很多R包可以用于图形组合,经典的是gridExtra,还有egg。今天介绍一个新包 patchwork
安装
# install.packages("devtools")
devtools::install_github("thomasp85/patchwork")
例子
patchwork的使用非常简单,就是利用**+**将图形组合起来。
library(ggplot2)
library(patchwork)
p1 <- ggplot(mtcars)+geom_point(aes(mpg, disp))
p2 <- ggplot(mtcars)+geom_boxplot(aes(gear, disp, group=gear))
# Combine these two plots together
p1+p2
布局
patchwork提供了一个专门用于图形布局的函数plot_layout()
,这样我们就可以自定义布局的行列数了
p1+p2+plot_layout(ncol = 1, heights = c(3,1))
如果需要在组合的图形之间留点空间,使用plot_spacer()
就行了
p1+plot_spacer()+p2
还可以将不同图形用{}封装,这样可以实现双重布局
p3 <- ggplot(mtcars)+geom_smooth(aes(disp, qsec))
p4 <- ggplot(mtcars)+geom_bar(aes(carb))
# nested plots layout
p4+{
p1+{
p2+
p3+
plot_layout(ncol = 1)
}
}+
plot_layout(ncol = 1)
高级参数
patchwork还提供了一些高级参数,比如/
,/
类似于操作符+
,但是它可以将不同plots至于同一个nesting水平,具体如下:
# first we use + to add plots and layout
(p1+p2)+p3+plot_layout(ncol = 1)
可以看出p1+p2组合之后并没有处于同一nesting水平
# then we use /
(p1+p2)/p3 + plot_layout(ncol = 1)
此时p1+p2先组合在同一水平再与p3组合
另外再介绍两个操作符:*
和^
这两个有点类似于正则表达式里的通配符了,主要是为了减轻代码量。比如如果我们需要修改所有plots的背景,就没必要每个plot都修改一遍了。这两个操作符的主要区别是*
只改变处于当前nesting水平的所有plots,^
则修改所有plots,具体如下:
(p1+(p2+p3)+p4+plot_layout(ncol = 1))*theme_bw()
可以看到这里只修改了p1和p4的背景主题,(p2+p3)没有修改
(p1+(p2+p3)+p4+plot_layout(ncol = 1))^theme_bw()
这里所有的plots的主题背景都被修改了。 目前这个包还处于开发阶段,将来还有很多功能会被加进去,我们拭目以待吧
SessionInfo
sessionInfo()
## R version 3.4.3 (2017-11-30)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 16299)
##
## Matrix products: default
##
## locale:
## [1] LC_COLLATE=Chinese (Simplified)_China.936
## [2] LC_CTYPE=Chinese (Simplified)_China.936
## [3] LC_MONETARY=Chinese (Simplified)_China.936
## [4] LC_NUMERIC=C
## [5] LC_TIME=Chinese (Simplified)_China.936
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] patchwork_0.0.1 ggplot2_2.2.1.9000
##
## loaded via a namespace (and not attached):
## [1] Rcpp_0.12.14 digest_0.6.13 rprojroot_1.2
## [4] plyr_1.8.4 grid_3.4.3 gtable_0.2.0
## [7] backports_1.1.2 magrittr_1.5 evaluate_0.10.1
## [10] scales_0.5.0.9000 rlang_0.1.4 stringi_1.1.6
## [13] lazyeval_0.2.1 rmarkdown_1.8 labeling_0.3
## [16] tools_3.4.3 stringr_1.2.0 munsell_0.4.3
## [19] yaml_2.1.16 compiler_3.4.3 colorspace_1.3-2
## [22] htmltools_0.3.6 knitr_1.17 tibble_1.3.4