查看原文
其他

patchwork包排版进阶,自定义程度极高的排版包

段小麻 R语言统计与绘图 2022-06-25

前面我们学习了patchwork包排版ggplot2图形的简单入门,今天来学习下patchwork包的复杂排版。

1. 安装和加载包

install.packages("ggplot2"# 安装包
install.packages("patchwork"# 安装包
library(ggplot2) # 加载包
library(patchwork) # 加载包

2. 绘制示例图形

绘制四个ggplot2示例图形用于演示排版。

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()函数

查看此函数帮助文件,可以看到这个函数主要的作用在于给组合图形添加标签和标题等。

下面来学习怎么使用这个函数。

函数使用比较简单,直接在组合图形后面使用+号连接该函数即可,代码如下:

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()函数可以用于组合图形的布局。

下面来学习怎么使用这个函数。

p1 + p2 + p3 + p4 + 
  plot_layout(ncol = 2, widths = c(12))

如上所示,图形设置为两列,默认按行填充,两列之间相对宽度比为1:2。

当然也可以设置heights参数为相对高度比1:2,代码如下。

p1 + p2 + p3 + p4 + 
  plot_layout(heights = c(12))

除了使用ncol、nrow、widths、heights等参数来调整排版外,还可以使用design参数来排版图形,这个更加复杂,自定义程度也更高。

design参数接受文本字符串来指定图形布局。

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来演示图例的设置。

p3 + p3

如上图所示,组合图形有两个图例,我们可以调整参数将其合并为1个图例。

设置参数guides='collect'即可。

p3 + p3 + plot_layout(guides='collect')

也可以设置参数调整图例的位置,比如说置于底部。

p3 + p3 + plot_layout(guides='collect') &
  theme(legend.position='bottom')

3.3 plot_spacer()函数排版

这个函数的目的就是在排版网格中创建一个空的透明色块,用来隔开其他图形。

下面来看看这个函数的使用。

首先先看下没有添加plot_spacer()函数的图形排版。

p1 + p2 + p3

添加plot_spacer()函数。

p1 + p2 + plot_spacer() + p3

如图所示,plot_spacer()函数就是在前后图形中创建一个空的透明网格,可以提高自定义排版的自由度。

p1 + plot_spacer() + p2 + plot_spacer() + p3 + plot_spacer()

4. 调整图形主题

除了设置排版布局外,还可以设置图形主题。

比如说设置theme_bw()主题,直接在组合图形后面用&符号连接起来即可。

p1 + p2 + p3 + p4 & theme_bw()

好的,patchwork包就学到这里,应该基本够用了。

对这个包有兴趣的读者可以点击阅读原文查看更复杂的自定义排版。

参考资料

  1. patchwork包帮助文件

既往专辑


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存