前面我们学习了 patchwork 包排版 ggplot2 图形的简单入门,今天来学习下 patchwork 包的复杂排版。
1. 安装和加载包
代码语言:javascript复制install.packages("ggplot2") # 安装包
install.packages("patchwork") # 安装包
library(ggplot2) # 加载包
library(patchwork) # 加载包
2. 绘制示例图形
绘制四个 ggplot2 示例图形用于演示排版。
代码语言:javascript复制p1 <- ggplot(mtcars, aes(x=mpg, y=wt))
geom_point() ggtitle('图1')
p2 <- ggplot(mtcars, aes(x=mpg, y=disp, group = gear))
geom_boxplot() ggtitle('图2')
p3 <- ggplot(mtcars, aes(x=hp, y=wt, colour = mpg))
geom_point() ggtitle('图3')
p4 <- ggplot(mtcars, aes(x=gear))
geom_bar() ggtitle('图4')
facet_wrap(~cyl)
p1 p2 p3 p4
3. 图形排版进阶
下面我们来学习下通过调整参数来进行复杂的排版。
patchwork包中用来调整排版设置的函数有plot_annotation()函数、plot_layout() 函数、plot_spacer() 函数等,下面一个一个看。
3.1 plot_annotation() 函数
查看此函数帮助文件,可以看到这个函数主要的作用在于给组合图形添加标签和标题等。
下面来学习怎么使用这个函数。
函数使用比较简单,直接在组合图形后面使用 号连接该函数即可,代码如下:
代码语言:javascript复制p1 p2 p3 p4
plot_annotation(tag_levels = "A",
title = "组合图形排版",
caption = "R语言统计与绘图 公众号")
如上图所示,可以使用 title、subtitle、caption 等参数来控制图形标题和副标题等。
使用 tag_levels 参数表示添加图形的标签,可以指定水平值为 a、A、1、i、I 等,分别表示小写字母、大写字母、数字、小写罗马数字、大写罗马数字等。
3.2 plot_layout() 函数排版
上面的 plot_annotation() 函数是用于添加组合图形的标签、标题等。
而 plot_layout() 函数可以用于组合图形的布局。
下面来学习怎么使用这个函数。
代码语言:javascript复制p1 p2 p3 p4
plot_layout(ncol = 2, widths = c(1, 2))
如上所示,图形设置为两列,默认按行填充,两列之间相对宽度比为 1:2。
当然也可以设置 heights 参数为相对高度比 1:2,代码如下。
代码语言:javascript复制p1 p2 p3 p4
plot_layout(heights = c(1, 2))
除了使用 ncol、nrow、widths、heights 等参数来调整排版外,还可以使用 design 参数来排版图形,这个更加复杂,自定义程度也更高。
design 参数接受文本字符串来指定图形布局。
代码语言:javascript复制design1 <- "
122
1#3
443
"
p1 p2 p3 p4 plot_layout(design = design1)
上面的 design1 表示将图形画板创建为9宫格布局,图1为在第1和4格,图2在第2和3格,图3在第6和9格,图4在7和8格,第5格是空的,用#号表示。
除了设置排版布局外,还可以使用 guides 参数来设置图形的图例。
在4个示例数据集中,图3是有图例的,那就用图3来演示图例的设置。
代码语言:javascript复制p3 p3
如上图所示,组合图形有两个图例,我们可以调整参数将其合并为1个图例。
设置参数 guides='collect' 即可。
代码语言:javascript复制p3 p3 plot_layout(guides='collect')
也可以设置参数调整图例的位置,比如说置于底部。
代码语言:javascript复制p3 p3 plot_layout(guides='collect') &
theme(legend.position='bottom')
3.3 plot_spacer() 函数排版
这个函数的目的就是在排版网格中创建一个空的透明色块,用来隔开其他图形。
下面来看看这个函数的使用。
首先先看下没有添加 plot_spacer() 函数的图形排版。
代码语言:javascript复制p1 p2 p3
添加 plot_spacer() 函数。
代码语言:javascript复制p1 p2 plot_spacer() p3
如图所示,plot_spacer() 函数就是在前后图形中创建一个空的透明网格,可以提高自定义排版的自由度。
代码语言:javascript复制p1 plot_spacer() p2 plot_spacer() p3 plot_spacer()
4. 调整图形主题
除了设置排版布局外,还可以设置图形主题。
比如说设置 theme_bw() 主题,直接在组合图形后面用 & 符号连接起来即可。
代码语言:javascript复制p1 p2 p3 p4 & theme_bw()
好的,patchwork 包就学到这里,应该基本够用了。
对这个包有兴趣的读者可以点击阅读原文查看更复杂的自定义排版。
参考资料
- patchwork 包帮助文件