几个月前,一篇Science文章的一个高颜值高难度组合图表(如下图)引起了众多大佬的兴趣,很多大佬尝试绘制并提供了多种画法,甚至还开发出了专门的R包。
今天为大家介绍厚缊大神开发的一个R包:ggcor,可以轻松绘制出这种图表。
首先,从github安装ggcor包。建议大家使用原生R软件安装,我自己开始用Rstudio 安装,反复报错,用原生R没问题,很神奇的样子。
# install.packages("devtools")
devtools::install_github("houyunhuang/ggcor")
接下来,读取 otu 丰度表和环境因子表,这里数据仅是测试数据,不具真实性。
spec1<- read.table("otu.txt", sep = "t", header = T, row.names = 1, check.names = F)
env <- read.table("env.txt", sep = "t", header = T, row.names = 1, check.names = F)
spec<-as.data.frame(t(spec1))
加载程序包,可以尝试计算环境因子的相关系数矩阵。
library(vegan)
library(ggcor)
library(dplyr)
corr <- fortify_cor(env, type = "upper", show.diag = TRUE,
cor.test = TRUE, cluster.type = "all")
head(corr)
也可以做不同群落与单个环境因子的mantel test,这里的群落分组方式(spec.select)是我自己随意定的,大家可以根据自己的数据自行命名和设定。
mantel<-fortify_mantel(spec, env, mantel.fun = "mantel.randtest",
spec.select = list(OTUs = 1:30,
mOTUs = 31:40,
genes = 41:50))
不同群落与单个环境因子的偏mantel test。
mantel<-fortify_mantel(spec, env[,1:7],env.ctrl=as.data.frame(env[,8]),
mantel.fun = "mantel.partial",
spec.select = list(OTUs = 1:30,
mOTUs = 31:40,
genes = 41:50))
对分析结果按r和p值进行重新赋值。
mantel<- fortify_mantel(spec, env,
spec.select = list(OTUs =1:30,
mOTUs =31:40,
genes =41:50)) %>%
mutate(r = cut(r, breaks = c(-Inf, 0.25, 0.5, Inf),
labels = c("<0.25", "0.25-0.5", ">=0.5"),
right = FALSE),
p.value = cut(p.value, breaks = c(-Inf, 0.001, 0.01, 0.05, Inf),
labels = c("<0.001", "0.001-0.01", "0.01-0.05", ">=0.05"),
right = FALSE))
接下来是关键步骤,绘制组合图。
p1<-quickcor(env, type = "upper") + geom_square() +
add_link(mantel, mapping = aes(colour = p.value, size = r),
diag.label = TRUE) +
scale_size_manual(values = c(0.5, 1.5, 3)) +
add_diaglab(angle = 0) + remove_axis("x")
p1
既然是基于ggplot2,我们可以自定义相关系数矩阵的渐变颜色和连线颜色。
library(ggplot2)
p2<-p1+scale_fill_gradient2(midpoint = 0, low = "#56B4E9", mid = "white",
high = "#E69F00", space = "Lab" )
p2
#自定义连线颜色;
p3<-p2+scale_color_manual(values=c("#56B4E9", "#E69F00", "#999999"))
p3
最后的绘制效果如下:
今天的内容就到这里啦~没看懂得还不赶快收藏起来学习!
参考文献
Sunagawa S, Coelho L P, Chaffron S, et al. Structure and function of the global ocean microbiome[J]. Science, 2015, 348(6237): 1261359.