在发表论文时候,经常会看到高大上的图片排列及绘制。通常我们用软件(spss+excel等)绘制好图片,都是单个figure。有时候很有必要将这些图片进行组合。一般都是PPT或者PS进行
当然,R语言ggplot可绘制精美的图片,但是在组合多个图片时候,往往会出现bug或者繁琐。
那么今天,本内容就来介绍,如何在R里面,利用patchwork
包对多个图片进行自由组合。
我们主要介绍patchwork
这里我特别喜欢patchwork的自动对每个图进行标识 ABC或(罗马字母)。
patchwork
我们直接案例展示,大家可以直接看效果:
案例展示
我们先准备3张图,根据mtcar数据,利用ggplot画3张图。如下
# install.packages("devtools")
devtools::install_github("thomasp85/patchwork")
# load package
library(tidyverse)
library(patchwork)
## vs转成 分类变量
mtcars=mtcars %>% mutate(vs=factor(vs))
## 散点图
p1 <- ggplot(mtcars) +
geom_point(aes(mpg, disp,color=vs)) +
ggtitle('Plot 1')
## 箱图
p2 <- ggplot(mtcars) +
geom_boxplot(aes(gear, disp, group = gear)) +
ggtitle('Plot 2')
## 散点图
p3 <- ggplot(mtcars) +
geom_point(aes(hp, wt, colour = mpg)) +
ggtitle('Plot 3')
## 柱状图
p4 <- ggplot(mtcars) +
geom_bar(aes(gear,fill=vs)) +
facet_wrap(~cyl) +
ggtitle('Plot 4')
1.左右拼接
p1
是存储了ggplot的画图元素,只需要用+
将两个ggplot画图元素连接起来即可,也可以连接三个,四个
p1+p2
p1+p2+p3
[图片上传失败...(image-91e7e7-1653958828272)]
2.上下拼接
上下拼接,用到/
将两个ggplot画图元素连接起来即可,也可以连接三个,四个, 如下
p1/p2
p1/p2/p3
[图片上传失败...(image-898cf9-1653958828272)]
3.组合拼接
这里组合,可以自定义上面1个或者2个图片,下面1个。只需要+
与 /
灵活运用。
当然,这里新增 |
这个符号,表示第一个图片是主提,第2,3个上下加起来是第一个图的长度。
(p1+p2)/
(p3)
p1 | (p2 / p3)
[图片上传失败...(image-c37665-1653958828272)]
4.组合图片的标题修改
这里是爬虫的主要优点,直接给组合图进行ABC的标注,或者罗马字母的标注,直接看图.
这里使用
plot_annotation
函数里面的tag_levels
参数,tag_levels
有五种选择方式:` 'a', 'A', '1', 'i, or 'I',
当然,还可以自定义,见help("plot_annotation")
;一般常用 plot_annotation(tag_levels = 'A')
### 添加图标识 ABC
p1 + p2 + p3 +
plot_annotation(tag_levels = 'A')
### 添加图标识 123
p1 + p2 + p3 +
plot_annotation(tag_levels = '1')
### 添加图标识 I II III
p1 + p2 + p3 +
plot_annotation(tag_levels = 'I')
### 添加图标识 ABC
(p1 +labs(title = "") )+
p2 + labs(title = "")+
plot_annotation(tag_levels = 'A')
[图片上传失败...(image-80bbdb-1653958828272)]
[图片上传失败...(image-c77c8-1653958828272)]
标题修改-添加主标题
# main title
p1 + p2 +
plot_annotation(title = 'The Main Tittle = Here we are')
# remove sub title
p1 + p2 + labs(subtitle = 'This will appear in the last plot')
(p1 +labs(title = "") )+
p2 + labs(title = "")
[图片上传失败...(image-db3802-1653958828272)]
5.组合图片的共享图例
有时候会需要将两个一样的图例进行合并。
当然还有更多排列方式,见
?plot_layout
## 合并图例
p1+p4+ plot_layout(guides = "collect")
## 放在底部
p1+p4+ plot_layout(guides = "collect") &
theme(legend.position='bottom')
[图片上传失败...(image-402849-1653958828272)]
共享x.y坐标名称
有时候会需要共享同一个x坐标的名字,或者y坐标的名字,这里只需要在 p
gglot元素里修改即可。例如
p1+
(p2+labs(y=""))+ plot_layout(guides = "collect")
[图片上传失败...(image-8795b6-1653958828272)]
[图片上传失败...(image-9a1bc8-1653958828272)]
类似包 gridExtra,cowplot都是对图片进行排列组合;后续会继续推出相关介绍。
参考: