R拼图包:patchwork
ggplot2的首席专家Thomas Lin Pedersen发布了patchwork这个包,专业拼图简单好用。
patchwork官方地址
参考刘小泽
一直深受ggplot2的拼图所困扰,每次需要导出图片在PS或AI里面拼图。有了patchwork可以直接在R里面拼图了。
功能:
- 拼合多张图
- 添加ABCD或I II III
- 同时修改多张图的图注位置
优点:代码简单,易学易懂,完美承接ggplot2.
安装
#CRAN安装稳定版
install.packages("patchwork")
#github安装开发版。二选一即可。
install.packages("devtools")
devtools::install_github("thomasp85/patchwork")
用法示例:
##用以测试patchwork包
##主要是用来拼合多个图片的
setwd("E:/Rcode")
library(ggplot2)
install.packages("patchwork")
library(patchwork)
p1 <- ggplot(mtcars)+geom_point(aes(mpg,disp))
p2 <- ggplot(mtcars)+geom_boxplot(aes(gear,disp,group=gear))
p3 <- ggplot(mtcars) + geom_smooth(aes(disp, qsec))
p4 <- ggplot(mtcars) + geom_bar(aes(carb))
+
表示横向排列,/
表示纵向排列,一次可以有多个+ /
组成公式
p1+p2
p1/p2
p1+p2/p3+p4
p2+(p1/p3)+p4
-
表示两个图放置在一个嵌套层
p1-p2
通过ncol指定绘图的列数,或者是nrow指定绘图的行数
当有多个图的时候,如果指定的列或行比图的实际数量少,则会压缩对应的图的宽度或长度
p4+p1+p2+plot_layout(ncol = 2)
p1+p3+p4/p2+plot_layout(nrow=2) #会压缩p4和p2的高度
可以用plot_spacer()添加一个空白图占位置
p1+plot_spacer()+p2
布局可以使用ABCD来表示
layout2 <- 'AAB
CDD'
p1+p2+p3+p4+plot_layout(design = layout2)
![p1+p2+p3+p4+plot_layout(design = layout2) ](https://img.haomeiwen.com/i18151951/5affc054cdb9c8d0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
给图添加图注字母
p1+p2+p3+p4+plot_annotation(tag_levels = 'I')
p1+p2/p3+p4+plot_annotation(tag_levels = 'A')
多重标注,先给p4|p2添加,再给p1添加。A1,A2和B
((p4 | p2) + plot_layout(tag_level = 'new'))/p1+plot_annotation(tag_levels = c('A', '1'))
同时添加多个标题
(p1+p2/p3+p4)+plot_layout(guides = 'collect')+plot_annotation(title="test layout for patchwork",caption = 'this is the caption',theme = theme(plot.caption = element_text(size=15)))
同时修改多个图的theme
(p1+p2/p4)*theme_void()
注意*号只能修改当前嵌套层,现在是只修改了p1图层,删除背景颜色
(p1+p2/p4)*theme_void()(p1+p2/p4)&theme_bw()+theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank())
&是同时删除背景颜色和网格线 操作对象是所有图层
(p1+p2/p4)&theme_bw()+theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank())(p4-p1/p3)*(theme_bw()+ theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank()))
只操作了P4图层,删掉背景色和网格线
###### 注意操作符号:
+ `-` 是把多个图层合成一个嵌套层,
+ `+`是把后面的层,添加到前面的层,
+ `|`和`/`分别表示横向排布和纵向排布。
+ `*`只操作一个嵌套层,`&`操作所有的层。