ggplot2是基于grid的绘图工具,它绘制的图像其实是由多个grob(grid graph object)组成的,比如一张点图,它的标题是titleGrob,点图的基本单元包括pointsGrob。
gtable可以个性化修改定制这些grob对象,从而可以对gplot2绘图对象进行更加高阶的定制,比如拼图、图中嵌图等。
很多工具包都可以进行拼图或嵌图, 比如cowplot、patchwork、ggpubr、gridExtra等等,但是gtable是相对底层的进行操纵ggplot2对象的包。cowplot的很多功能实现就依赖于gtable。
最近探索了一下gtable的使用,主要是两个方面:如何进行拼图和嵌图。
使用gtable进行拼图
cowplot拼图示例
cowplot就可以很方便的进行拼图,使用plot_grid函数即可,如下图所示。
如果觉得每张图片太大,还可以使用scale功能对每张图片进行缩放。
对于ncol、nrow参数而言,它们几乎已经是拼图布局的行列定义的标签了,在多个拼图工具中都能见到,比如ggpubr的ggarrange函数,当然这也不奇怪,毕竟ggarrange就是依赖的cowplot包。
还可以定义多行或者多列的比例,使用rel_widths或者rel_heights来指定。
align参数用于对齐多个图的元素,可以对水平、垂直方向进行对齐。
library(tidyverse)
library(grid)
library(gtable)
library(cowplot)
p1 % ggplot(aes(x = mpg, y = disp, color = am)) +
geom_point()
p2 % ggplot(aes(x = Sepal.Length, y = Sepal.Width)) +
geom_boxplot(aes(fill = Species))
cowplot::plot_grid(p1, p2, ncol = 2)