我有一次想用patchwork拼图,但是我查看了好多推文(见结尾参考),都无法完整完成我的全部要求。我在微信搜一搜里面输入patchwork,往下翻看了至少200篇帖子,这些帖子将patchwork包的功能都有描述,但是或多或少的都不够完整,最起码不够解决我目前的需求。所以我就做另一个小工作,将题目全部描述的全部功能汇总到了一个帖子上,其次在官方教程上其他功能加入到这里面,相信可以为大家带来最完整的patchwork拼图教程。
patchwork
注意:先更新一下包,因为有新的功能
# library(BiocManager)
# install("patchwork")
(p1 | p2 | p3) /p4 :同行图形用|分隔,下一行图形用/分隔
只能做图中图,如果要有一部分到图形外面那就显示不了了
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)
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))
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)
p1 + inset_element(p2, left = 0.4, bottom = 0.3, right = 0.95, top = 0.9)
p1 + inset_element(p2, left = unit(1, 'cm'), bottom = unit(30, 'pt'), right = unit(3, 'in'),
top = 0.8)
也可以仿照内部布局进行内部添加图像
logo <- system.file('help', 'figures', 'logo.png', package = 'patchwork')
logo <- png::readPNG(logo, native = TRUE)
p1 + logo
# ?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')
guides = ’collect’图例放置于右侧
p1 + p3 + p2 + plot_layout(guides = 'collect')
全局图形主题修改
p1 + p2 + p3 & theme_bw()
子图图形主题修改 * 单个主题修改
p1 + p2 + p3 * theme_bw()
# 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
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 WT
PlotresultBar = aovMuiBarPlot(data = data_wt, i= 6,sig_show ="abc",result = result[[1]])
#提取结果
p5 <- PlotresultBar[[1]]
p1 + p2 + p3 + p5
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()
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()
p6 <- base2grob(~plot(iris$Sepal.Length,iris$Sepal.Width,col = "red",pch = 15))
p3 + p5 + p6
到此,大部分出图形式都可以一起拼图了。
微生信生物已经创立三年有余了,在这几年中,感谢铁杆分析的支持,同时希望越来越多的小伙伴加入微生信生物大家庭,目前微生信交流群已经超过2000人。帮助许多小伙伴解决的大量问题。
关注统计分析和出图,关注各大组学数据分析流程和各种高级分析。专注解决尚未解决的问题,在分析领域著重创新,时间,问题解决,用于探索发现。
关注R语言,python,perl,shell等语言使用。定期分分享相关学习指南。R语言是使用的比较多的分析语言,会用大量的R语言教程。
团队成员邮箱 袁军:
junyuan@njau.edu.cn;
文涛:
2018203048@njau.edu.cn
团队公众号:
联系客服