ggplot2一页多图(图独立)

在一个页面上自由组合各种图(可以毫无关联),省空间,又能表达自己需求。

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

次;