查看原文
其他

ggcor在微生物生态领域的使用实战​

文涛聊科研 生信宝典 2022-03-29

ggcor·作者信息:

厚缊 业余的R语言可视化重度患者
个人博客:houyun.xyz
邮箱:houyunhuang@163.com




目前厚哥这个包还在不断开发中,但是我已经迫不及待想试试了。

包的安装使用github安装函数install_github

简单来说一下这个包用来干什么的?(下面摘抄自厚哥亲笔)

相关系数矩阵可视化已经至少有两个版本的实现了,魏太云基于base绘图系统写了corrplot包,应该说是相关这个小领域中最精美的包了,使用简单,样式丰富,只能用惊艳来形容。Kassambara的ggcorrplot基于ggplot2重写了corrplot,实现了corrplot中绝大多数的功能,但仅支持“square”和“circle”的绘图标记,样式有些单调,不过整个ggcorrplot包的代码大概300行,想学习用ggplot2来自定义绘图函数,看这个包的源代码很不错。还有部分功能相似的corrr包(在写ggcor之前完全没有看过这个包,写完之后发现在相关系数矩阵变data.frame方面惊人的相似),这个包主要在数据相关系数提取、转换上做了很多的工作,在可视化上稍显不足。ggcor的核心是为相关性分析、数据提取、转换、可视化提供一整套解决方案,目前的功能大概完成了70%,后续会根据实际需要继续扩展。

if(!require(devtools))
install.packages("devtools")
if(!require(ggcor))
devtools::install_github("houyunhuang/ggcor")

待会介绍一些实战需要的函数,然后介绍几个我喜欢的几个可视化方案。

这里的示例数据都是现成的,所以大家对照运行即可。

导入r包和示例数据:

suppressWarnings(suppressMessages(library("ggcor")))
corr <- cor(mtcars)
df <- as_cor_tbl(corr)
df ## return a tibble
## # A tibble: 121 x 3
## x y r
## * <int> <int> <dbl>
## 1 1 11 1
## 2 1 10 -0.852
## 3 1 9 -0.848
## 4 1 8 -0.776
## 5 1 7 0.681
## # ... with 116 more rows
## Extra attributes:
## xname: mpg cyl disp hp drat wt qsec vs am gear carb
## yname: carb gear am vs qsec wt drat hp disp cyl mpg
## type: full
## show.diag: TRUE

下面介绍几种本人喜欢的可视化方式。

注意一下开发版本才能添加颜色设置参数,我这里统一将图例修改为离散型颜色:fill.bin = TRUE, legend.breaks = seq(-1, 1, length.out = 5)

#这里不仅仅展示了相关值,而且展示了置信区间,geom_cross用于排除不显著相关。
#
ggcor(mtcars, type = "full", cor.test = TRUE) + geom_confbox()+ geom_cross()

这里使用方形展示,并且将不显著的去掉(X)

# 这里使用方形我觉得高档一些,本人比较喜欢
ggcor(mtcars, type = "full", cor.test = TRUE) +
geom_square() + geom_cross()

配合颜色填充和相关标注,加上显著性标签很容易整体把控指标的相关性。这里厚哥添加的是五角星形状,我们来了解一下:

# 这里使用方形我觉得高档一些,本人比较喜欢
ggcor(mtcars, type = "full", cor.test = TRUE) +
# geom_square() +
geom_star(n = 5)+
geom_cross()

  • r = NA 参数去除相关值,因为颜色已经表示过相关大小了,值就省略掉吧。

  • mark = "*"参数可以规范统一的显著性标签。


#配合颜色填充和相关标注,加上显著性标签很容易整体把控指标的相关性。使用r = NA参数去除相关值,因为颜色已经表示过相关大小了,值就省略掉吧,mark = "*"参数规范统一的显著性标签。
ggcor(mtcars, type = "full", cor.test = TRUE, cluster.type = "all") +
# geom_raster() +
geom_colour()+
geom_mark(r = NA,sig.thres = 0.05, size = 3, colour = "grey90")

非对称相关图形可以节省空间,很多人曾求助怎么做,其实就是将最后的出图矩阵做相应的裁剪就好了,之前我都是自己裁剪的,现在厚哥包装进去了,方便了很多。

# 非对称相关图形可以节省空间,很多人曾求助怎么做,其实就是将最后的出图矩阵做相应的裁剪就好了,之前我都是自己裁剪的,现在厚哥包装进去了,方便了很多。
suppressWarnings(suppressMessages(library(vegan))) # 使用vegan包所带的数据集
data(varechem)
data(varespec)
df03 <- fortify_cor(x = varechem, y = varespec[ , 1:30], cluster.type = "col")
ggcor(df03) + geom_square()

群落矩阵和环境因子相关:

corr <- fortify_cor(varechem, type = "upper", show.diag = TRUE,
cor.test = TRUE, cluster.type = "all")
mantel <- fortify_mantel(varespec, varechem,
spec.select = list(spec01 = 22:25,
spec02 = 1:4,
spec03 = 38:43,
spec04 = 15:20),
mantel.fun = "mantel.randtest")
ggcor(corr, xlim = c(-5, 14.5)) +
add_link(mantel, diag.label = TRUE) +
add_diaglab(angle = 45) +
geom_square() + remove_axis("y")

另外一种方式组合:

library(cowplot)

mantel <- fortify_mantel(varespec, varechem,
spec.select = list(spec01 = 22:25,
spec02 = 1:4,
spec03 = 38:43,
spec04 = 15:20),
mantel.fun = "mantel.randtest")
mantel$p <- cut(mantel$p, breaks = c(0, 0.001, 0.01, 0.05, 1),
labels = c("< 0.001", "< 0.01", "< 0.05", ">= 0.05"),
right = FALSE, include.lowest = TRUE)
p1 <- ggcor(varechem) + geom_square() + remove_axis("x")
p2 <- ggcor(mantel, mapping = aes(fill = p), is.minimal = TRUE, keep.name = TRUE) +
geom_star(aes(r = 0.65), n = 5, ratio = 0.6) +
scale_fill_manual(values = c("darkgreen", "green", "lightgreen", "grey95"),
drop = FALSE)
plot_grid(p1, p2, ncol = 1, align = "v", labels = c('A', 'B'),
rel_heights = c(0.13*dim( varechem)[2], 1))


微生物生态学领域实战

我基于phloseq包开发了一系列基于扩增子的数据分析脚本,不久会将上面的脚本纳入其中,下面是phyloseq的封装格式和基本用法。

library("phyloseq")
library(microbiomeSeq)
library("vegan")
library("grid")
library("gridExtra")
library("ggplot2")
ps = readRDS(".//ps_OTU_.rds")
ps1 = ps
ps1 = filter_taxa(ps1, function(x) sum(x ) > 200 , TRUE);ps1
## phyloseq-class experiment-level object
## otu_table() OTU Table: [ 78 taxa and 24 samples ]
## sample_data() Sample Data: [ 24 samples by 14 sample variables ]
## tax_table() Taxonomy Table: [ 78 taxa by 7 taxonomic ranks ]
ps1 = transform_sample_counts(ps1, function(x) x / sum(x) );ps1## phyloseq-class experiment-level object
## otu_table() OTU Table: [ 78 taxa and 24 samples ]
## sample_data() Sample Data: [ 24 samples by 14 sample variables ]
## tax_table() Taxonomy Table: [ 78 taxa by 7 taxonomic ranks ]
path = "./phyloseq_5_RDA_CCA_cor/"
dir.create(path)

vegan_otu <- function(physeq){
OTU <- otu_table(physeq)
if(taxa_are_rows(OTU)){
OTU <- t(OTU)
}
return(as(OTU,"matrix"))
}
otu = as.data.frame(t(vegan_otu(ps1)))

mapping = as.data.frame( sample_data(ps1))
env.dat = mapping[,3:ncol(sample_data(ps1))]
env.st = decostand(env.dat, method="standardize", MARGIN=2)#
env_dat = env.st
#这里不仅仅展示了相关值,而且展示了置信区间,geom_cross用于排除不显著相关。
ggcor(env_dat, type = "full", cor.test = TRUE) + geom_confbox()+ geom_cross()

这里使用方形我觉得高档一些,本人比较喜欢,将不显著的去掉。

# 这里使用方形我觉得高档一些,本人比较喜欢
ggcor(env_dat, type = "full", cor.test = TRUE) +
geom_square() + geom_cross()

配合颜色填充和相关标注,加上显著性标签很容易整体把控指标的相关性。使用r = NA参数去除相关值,因为颜色已经表示过相关大小了,值就省略掉吧,mark = "*"参数规范统一的显著性标签。

#配合颜色填充和相关标注,加上显著性标签很容易整体把控指标的相关性。使用r = NA参数去除相关值,因为颜色已经表示过相关大小了,值就省略掉吧,mark = "*"参数规范统一的显著性标签。
ggcor(env_dat, type = "full", cor.test = TRUE, cluster.type = "all") +
# geom_raster() +
geom_colour()+
geom_mark(r = NA,sig.thres = 0.05, size = 3, colour = "grey90")

这样一来我们来挑选微生物和环境因子做相关就方便多了。

# 非对称相关图形可以节省空间,很多人曾求助怎么做,其实就是将最后的出图矩阵做相应的裁剪就好了,之前我都是自己裁剪的,现在厚哥包装进去了,方便了很多。
#计算相关
#太多OTU展示起来不太好看,这里我选择30个展示
ss = t(otu)[,1:30]
df03 <- fortify_cor(x = env_dat, y = ss, cluster.type = "col")
ggcor(df03) + geom_square()

现在我们来组合群落和环境因子关系,这里我模拟了两个群落,这两个群落都是一样的,我通过list收纳这两个群落。

  •  xlim = c(-5, (dim(env_dat)[2] +0.5)):在厚哥的指点下修改为环境因子数量加0.5,厚哥表示可能之后这个参数会被写到函数内部。

#转置otu表格,作为第一个群落
otu2 = t(otu)
#同样赋值为第二个群落
otu3 = t(otu)
#无论多少个群落,将其使用list包起来,注意设置名称
spe = list(A = otu2,B = otu3)


#计算环境因子相关
corr <- fortify_cor(env_dat , type = "upper", show.diag = TRUE,
cor.test = TRUE, cluster.type = "all")
#计算环境因子和群落相关
mantel <- fortify_mantel(spe , env_dat,
# spec.select = list(A = 1:dim(otu2)[2]),
mantel.fun = "mantel")

#出图
ggcor(corr, xlim = c(-5,(dim(env_dat)[2] +0.5))) +
add_link(mantel, diag.label = TRUE) +
add_diaglab(angle = 45) +
geom_square() + remove_axis("y")

下面展示一个四个群落的数据。

#转置otu表格,作为第一个群落
otu2 = t(otu)
#同样赋值为第二个群落
otu3 = t(otu)
#无论多少个群落,将其使用list包起来,注意设置名称
spe = list(A = otu2,B = otu3,C = otu3,D = otu3)

corr <- fortify_cor(env_dat , type = "upper", show.diag = TRUE,
cor.test = TRUE, cluster.type = "all")

mantel <- fortify_mantel(spe , env_dat ,
# spec.select = list(A = 1:dim(otu2)[2]),
mantel.fun = "mantel")


ggcor(corr, xlim = c(-5, (dim(env_dat)[2] +0.5))) +
add_link(mantel, diag.label = TRUE) +
add_diaglab(angle = 45) +
# geom_square() +
geom_star(n = 5)+
remove_axis("y")

下面是另外一种可视化群落和环境因子关系的组合图表,B图需要调整大小,这里我本来以为是线性映射,做一个变量,显然不是,我还是老老实实修改了一下大小。这里我们的群落和环境因子之间没有相关关系。

library(cowplot)
#转置otu表格,作为第一个群落
otu2 = t(otu)
#同样赋值为第二个群落
otu3 = t(otu)
#无论多少个群落,将其使用list包起来,注意设置名称
spe = list(A = otu2,B = otu3,C = otu3,D = otu3)

corr <- fortify_cor(env_dat , type = "upper", show.diag = TRUE,
cor.test = TRUE, cluster.type = "all")

mantel <- fortify_mantel(spe , env_dat ,
# spec.select = list(A = 1:dim(otu2)[2]),
mantel.fun = "mantel")

mantel$p <- cut(mantel$p, breaks = c(0, 0.001, 0.01, 0.05, 1),
labels = c("< 0.001", "< 0.01", "< 0.05", ">= 0.05"),
right = FALSE, include.lowest = TRUE)
p1 <- ggcor(env_dat) +
# geom_square() +
geom_star(n = 5)+
remove_axis("x")
p2 <- ggcor(mantel, mapping = aes(fill = p), is.minimal = TRUE, keep.name = TRUE) +
geom_star(aes(r = 0.65), n = 5, ratio = 0.6) +
scale_fill_manual(values = c("darkgreen", "green", "lightgreen", "grey95"),
drop = FALSE)
plot_grid(p1, p2, ncol = 1, align = "v", labels = c('A', 'B'),
rel_heights = c(0.155*dim(env_dat)[2], 1))

常见问题

binned_scale找不到

这是由于ggplot版本问题,这里需要升级成新版本,来自github。

install.packages(“remotes”) remotes::install_github(“hadley/ggplot2”)


Error: ‘decode_colour’ is not an exported object from ‘namespace:farver’

这是farver版本问题

install.packages(“farver”)


推荐阅读



学习津贴


单篇留言点赞数的第一位(点赞数至少为8)可获得我们赠送的在线基础课的9折优惠券

越留言,越幸运。

主编会在每周选择一位最有深度的留言,评论者可获得我们赠送的任意一门在线课程的9折优惠券偷偷告诉你,这个任意是由你选择哦)。

高颜值免费在线绘图




往期精品

画图三字经 生信视频 生信系列教程 

心得体会 TCGA数据库 Linux Python 

高通量分析 免费在线画图 测序历史 超级增强子

生信学习视频 PPT EXCEL 文章写作 ggplot2

海哥组学 可视化套路 基因组浏览器

色彩搭配 图形排版 互作网络

自学生信 2019影响因子 GSEA 单细胞 

后台回复“生信宝典福利第一波”或点击阅读原文获取教程合集




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存