ggplot2 图形排版:patchwork 包复杂排版

2021-10-15 12:11:52 浏览数 (1)

前面我们学习了 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 包就学到这里,应该基本够用了。

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

参考资料

  1. patchwork 包帮助文件

0 人点赞