在一个页面上自由组合各种图(可以毫无关联),省空间,又能表达自己需求。
require(ggplot2)
require(grid)
#####现将图画好,并且赋值变量,储存#####
p1 <- ggplot(mtcars, aes(mpg, wt, colour = factor(cyl))) + geom_point()
p2 <- ggplot(diamonds, aes(carat, depth, colour = color)) + geom_point()
p3 <- ggplot(diamonds, aes(carat, depth, colour = color)) + geom_point() + facet_grid(.~color,scale = "free")
p1
p2
p3
这里有三张图p1,p1,p3
,我想把它输出到一个页面上,不单独输出,可以用一些方法
方法一: 使用grid包
########新建画图页面###########
grid.newpage() ##新建页面
pushViewport(viewport(layout = grid.layout(2,2))) ####将页面分成2*2矩阵
vplayout <- function(x,y){
viewport(layout.pos.row = x, layout.pos.col = y)
}
print(p3, vp = vplayout(1,1:2)) ###将(1,1)和(1,2)的位置画图p3
print(p2, vp = vplayout(2,1)) ###将(2,1)的位置画图p2
print(p1, vp = vplayout(2,2)) ###将(2,2)的位置画图p1
#dev.off() ##画下一幅图,记得关闭窗口
方法二: 使用patchwork包
这个包需要从github上安装
devtools::install_github("thomasp85/patchwork")
library(ggplot2)
library(patchwork)
p1 <- ggplot(mtcars, aes(mpg, wt, colour = factor(cyl))) + geom_point()
p2 <- ggplot(diamonds, aes(carat, depth, colour = color)) + geom_point()
p1 + p2 #把图p1 ,p2画在一页上
# 可以直接进行拼凑
ggplot(mtcars, aes(mpg, wt, colour = factor(cyl))) + geom_point() +
ggplot(diamonds, aes(carat, depth, colour = color)) + geom_point()# 默认的页面布局是1行多列
使用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))
p4 + {
p1 + {
p2 +p3 +plot_layout(ncol = 1)
}
} +plot_layout(ncol = 1)
### 高级功能
拼凑的有趣之处在于您可以使用
+
,-
运算符来定义嵌套级别:
p1 + p2 + p3 + plot_layout(ncol = 1)
# 看看下面的代码并注意到现在p1和p2是“嵌套的”:
p1 + p2 - p3 + plot_layout(ncol = 1)
## 接下来两个操作是|和/分别用于水平和垂直布局。您可以在同一操作中使用它们
(p1 | p2 | p3) /p4
最后,您可以使用
&
或*
而不必为每个单独的绘图设置布局设置。这是非常有用的功能,特别是如果您需要将多个图组合在一起。 *
修改当前嵌套级别的图:
(p1 + (p2 + p3) + p4 + plot_layout(ncol = 1)) * theme_bw() # * 只会影响当前嵌套级别的图
p1 + (p2 + p3) + p4 + plot_layout(ncol = 1) & theme_bw() # & 将递归到嵌套级别
sessionInfo()
#> R version 4.0.2 (2020-06-22)
#> Platform: x86_64-apple-darwin17.0 (64-bit)
#> Running under: macOS Mojave 10.14.5
#>
#> Matrix products: default
#> BLAS: /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRblas.dylib
#> LAPACK: /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRlapack.dylib
#>
#> locale:
#> [1] zh_CN.UTF-8/zh_CN.UTF-8/zh_CN.UTF-8/C/zh_CN.UTF-8/zh_CN.UTF-8
#>
#> attached base packages:
#> [1] grid stats graphics grDevices utils datasets methods
#> [8] base
#>
#> other attached packages:
#> [1] patchwork_1.0.1 ggplot2_3.3.2
#>
#> loaded via a namespace (and not attached):
#> [1] pillar_1.4.6 compiler_4.0.2 tools_4.0.2 digest_0.6.25
#> [5] lattice_0.20-41 nlme_3.1-148 evaluate_0.14 lifecycle_0.2.0
#> [9] tibble_3.0.3 gtable_0.3.0 viridisLite_0.3.0 mgcv_1.8-31
#> [13] pkgconfig_2.0.3 rlang_0.4.7 Matrix_1.2-18 yaml_2.2.1
#> [17] blogdown_0.20 xfun_0.17 withr_2.2.0 stringr_1.4.0
#> [21] dplyr_1.0.1 knitr_1.29 generics_0.0.2 vctrs_0.3.2
#> [25] tidyselect_1.1.0 glue_1.4.1 R6_2.4.1 rmarkdown_2.3
#> [29] bookdown_0.20 purrr_0.3.4 farver_2.0.3 magrittr_1.5
#> [33] scales_1.1.1 ellipsis_0.3.1 htmltools_0.5.0 splines_4.0.2
#> [37] colorspace_1.4-1 labeling_0.3 stringi_1.4.6 munsell_0.5.0
#> [41] crayon_1.3.4