如何用patchwork拼R语言大部分类型出图和图片
写在前面
我有一次想用patchwork拼图,但是我查看了好多推文(见结尾参考),都无法完整完成我的全部要求。我在微信搜一搜里面输入patchwork,往下翻看了至少200篇帖子,这些帖子将patchwork包的功能都有描述,但是或多或少的都不够完整,最起码不够解决我目前的需求。所以我就做另一个小工作,将题目全部描述的全部功能汇总到了一个帖子上,其次在官方教程上其他功能加入到这里面,相信可以为大家带来最完整的patchwork拼图教程。
patchwork
注意:先更新一下包,因为有新的功能
# library(BiocManager)
# install("patchwork")
用patchwork拼图的语法
(p1 | p2 | p3) /p4 :同行图形用|分隔,下一行图形用/分隔
如何使用patchwork做图总图
只能做图中图,如果要有一部分到图形外面那就显示不了了
library(ggplot2)
library(patchwork)
p1 <- ggplot(mtcars) +
geom_point(aes(mpg, disp)) +
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')
横向布局
p1+p2+p3
纵向布局
p1/p2/p3
矩阵布局语法
(p1|p2|p3)/(p1|p2)
下面弄这个例子就可以很明白拼图的语法(p1|p2|p3)/(p1|p2)/(p1|p2|p3)/(p1)
通过plot_layout布局:设置行,列的图形数量
p1 + p2 + p3 + plot_layout(nrow = 3, byrow = FALSE)
p1 + p2 + p3 + plot_layout(ncol = 3, byrow = FALSE)
#---纵向排布
p1 + p2 + p3 + plot_layout(ncol = 2, byrow = FALSE)
#横向排布
p1 + p2 + p3 + plot_layout(ncol = 2, byrow = T)
p1 + p2 + p3 + p3 +
plot_layout(widths = c(3, 1))
plot_spacer():通过添加空白位置来调整布局,类似 占位符
p1 + plot_spacer() + p2 + plot_spacer() + p3 + plot_spacer()
自定义布局
用字母进行标记,订制格式
layout <- "
##BBBB
AACCDD
##CCDD
"
p1 + p2 + p3 + p3 +
plot_layout(design = layout)
layout <- "
##bbbb
aaccdd
##ccdd
"
p1 + p2 + p3 + p3 +
plot_layout(design = layout)
layout <- "
##1111
223344
##3344
"
p1 + p2 + p3 + p3 +
plot_layout(design = layout)
模块化布局指定其实模块和结束模块,类似于ecxcel中点击鼠标往下拉的操作,设定起始坐标和最重坐标。
area1<-area(1,1,3,1)
area2<-area(1,2,1,4)
area3<-area(2,2,2,4)
area4<-area(3,2)
area5<-area(3,3,3,4)
area6<-area(4,1,4,4)
areas<-c(area1,area2,area3,area4,area5,area6)
plot(areas)
p1+p2+p3+p1+plot_spacer()+p3+plot_layout(design = areas)
内部布局 inset_element 相对位置 百分比调整
p1 + inset_element(p2, left = 0.4, bottom = 0.3, right = 0.95, top = 0.9)
精确指定位置 inset_element 通过unit指定距离
p1 + inset_element(p2, left = unit(1, 'cm'), bottom = unit(30, 'pt'), right = unit(3, 'in'),
top = 0.8)
ggplot图形和图像的结合
也可以仿照内部布局进行内部添加图像
logo <- system.file('help', 'figures', 'logo.png', package = 'patchwork')
logo <- png::readPNG(logo, native = TRUE)
p1 + logo
添加图片标签 plot_annotation :给图形添加标签 编号
# ?plot_annotation
p1 + p2 + p3 +
plot_annotation(tag_levels = 'I')
#--一般我使用大写的字母或者小写的字母
p1 + p2 + p3 +
plot_annotation(tag_levels = 'A')
p1 + p2 + p3 +
plot_annotation(tag_levels = 'a')
图例操作 plot_layout功能二
guides = ’collect’图例放置于右侧
p1 + p3 + p2 + plot_layout(guides = 'collect')
图形主题的修改与*与&用法 & 修改全局主题
全局图形主题修改
p1 + p2 + p3 & theme_bw()
子图图形主题修改 * 单个主题修改
p1 + p2 + p3 * theme_bw()
下面这个例子 意思是只要是ggplot出图,都可以进行图形的组合
gg.gap 截断坐标轴 也是gg出图
# install.packages("gg.gap")
library(gg.gap)
data <-
data.frame(x = c("Alpha", "Bravo", "Charlie", "Delta"),
y = c(200, 20, 10, 15))
#画图
p1 = ggplot(data, aes(x = x, y = y, fill = x)) +
geom_bar(stat = 'identity', position = position_dodge(),show.legend = FALSE) +
theme_bw() +
labs(x = NULL, y = NULL)
p2 =gg.gap(plot = p1,
segments = c(25, 190),
tick_width = 10,
rel_heights = c(0.25, 0, 0.1),
ylim = c(0, 200)
)
p2
p1 + p2 + p3
这个例子是EasyStat中的,当然也是gg出图,直接拼接。
library(EasyStat)
library(dplyr)
result= aovMcomper (data = data_wt, i= 6,method_Mc = "Tukey")
# 提取多重比较结果
result[[1]]## groups group
## CF a CF
## CK a CK
## Rhi b Rhi
## WT a WTPlotresultBar = aovMuiBarPlot(data = data_wt, i= 6,sig_show ="abc",result = result[[1]])
#提取结果
p5 <- PlotresultBar[[1]]
p1 + p2 + p3 + p5
如何将 pheatmap 和gg拼图到一起
d <- matrix(rnorm(100), ncol=10)
library(pheatmap)
p <- pheatmap(d)
# library(BiocManager)
# install("ggplotify")
require(ggplotify)
g = as.ggplot(p)
p3 + p5 + g * theme_dark()
base plot 如何和ggplot出图拼接到一起呢?
plotbb 不可以拼图,也不可以转化为ggplot对象
library(plotbb)
##Y叔写的图形语法我认为很有前瞻性质,因为base能解决ggplot所不能解决的问题,目前github上有43颗星星#-----
#--仿照ggplot的qplot写的一个函数
p <- bbplot(mtcars, bb_aes(mpg, disp, col=factor(cyl)))
p6 <- p + bb_grid(col='grey50', lty='dashed') + bb_point(pch=21)
# base2grob()
但是base2grob()函数可以,只是需要输入一个表达式
p6 <- base2grob(~plot(iris$Sepal.Length,iris$Sepal.Width,col = "red",pch = 15))
p3 + p5 + p6
后记
到此,大部分出图形式都可以一起拼图了。
微生信生物简介
微生信生物已经创立三年有余了,在这几年中,感谢铁杆分析的支持,同时希望越来越多的小伙伴加入微生信生物大家庭,目前微生信交流群已经超过2000人。帮助许多小伙伴解决的大量问题。
关注统计分析和出图,关注各大组学数据分析流程和各种高级分析。专注解决尚未解决的问题,在分析领域著重创新,时间,问题解决,用于探索发现。
关注R语言,python,perl,shell等语言使用。定期分分享相关学习指南。R语言是使用的比较多的分析语言,会用大量的R语言教程。
根际互作生物学研究室 简介
根际互作生物学研究室是沈其荣教授土壤微生物与有机肥团队下的一个关注于根际互作的研究小组。本小组由袁军副教授带领,主要关注:1.植物和微生物互作在抗病过程中的作用;2 环境微生物大数据整合研究;3 环境代谢组及其与微生物过程研究体系开发和应用。团队在过去三年中在 isme J, Microbiome, PCE,SBB,Horticulture Research等期刊上发表了多篇文章。欢迎关注 微生信生物 公众号对本研究小组进行了解。
了解 交流 合作
团队成员邮箱 袁军:
junyuan@njau.edu.cn;
文涛:
2018203048@njau.edu.cn
团队公众号: