R语言|绘制主坐标分析PCoA图

主坐标分析(Principal Coordinates Analysis,PCoA)是一种研究数据相似性或差异性的可视化方法,把复杂的数据用一系列的特征值和特征向量进行排序后,选择排在前面的几位特征值,用来表示样品之间的关系并以坐标的形式展现,结果是数据矩阵的旋转,通过PCA 可以找到距离矩阵中最主要的坐标,观察个体或者群体之间的差异。

PCoA分析比较适用样本数目比较少,而物种数目比较多的情况。

小编今天给大家分享R包vegan绘制主坐标分析PCoA图。

具体步骤如下:
1.加载vegan和ggplot2包;

#导入作图包
library(vegan)
library(ggplot2)
#颜色选择
color=c( "#3C5488B2","#00A087B2", 
         "#F39B7FB2","#91D1C2B2", 
         "#8491B4B2", "#DC0000B2", 
         "#7E6148B2","yellow", 
         "darkolivegreen1", "lightskyblue", 
         "darkgreen", "deeppink", "khaki2", 
         "firebrick", "brown1", "darkorange1", 
         "cyan1", "royalblue4", "darksalmon", 
         "darkgoldenrod1", "darkseagreen", "darkorchid")

2.读取otu数据文件,计算样方间距离,并读入此距离测度作为PCoA的输入。
(小编这里没有现成的距离文件,所以需要先根据OTU的丰度组成来计算样方间距离)

#读取otu数据文件
otu <- read.delim('otu_table.txt', row.names = 1, sep = '\t', stringsAsFactors = FALSE, check.names = FALSE)
otu <- data.frame(t(otu))

#根据物种组成计算样方距离,结果以 dist 数据类型存储
bray_dis <- vegdist(otu, method = 'bray')   

#样方排序坐标
pcoa <- cmdscale(bray_dis, k = (nrow(otu) - 1), eig = TRUE)
site <- data.frame(pcoa$point)[1:2]
site$name <- rownames(site)
image.png

3.读取分组文件,并将分组文件和距离文件合并;

#读取分组文件
map<-read.table('group.txt',header=T,sep="\t",row.names=1)
#site$group <- c(rep('A', 12), rep('B', 12), rep('C', 12))
#将分组文件和数据文件以行名合并
merged=merge(site,map,by="row.names",all.x=TRUE)

4.使用 wascores() 被动添加物种得分(坐标),丰度加权平均方法;

#使用 wascores() 被动添加物种得分(坐标),丰度加权平均方法
species <- wascores(pcoa$points[,1:4], otu)

5.这里小编主要展示top10 丰度物种;

#所有物种太多了,挑主要的展示,如 top10 丰度物种
#计算 top10 丰度物种
abundance <- apply(otu, 2, sum)
abundance_top10 <- names(abundance[order(abundance, decreasing = TRUE)][1:10])

species_top10 <- data.frame(species[abundance_top10,1:2])
species_top10$name <- rownames(species_top10)

pcoa_exp <- pcoa$eig/sum(pcoa$eig)
pcoa1 <- paste('PCoA axis1 :', round(100*pcoa_exp[1], 2), '%')
pcoa2 <- paste('PCoA axis2 :', round(100*pcoa_exp[2], 2), '%')

6.使用ggplot2包作图;

#ggplot2 作图
library(ggplot2)
p <- ggplot(data = merged, aes(X1, X2)) +
  geom_point(aes(color = group)) +
  stat_ellipse(aes(fill = group), geom = 'polygon', level = 0.95, alpha = 0.1, show.legend = FALSE) +   #添加置信椭圆,注意不是聚???
  scale_color_manual(values =color[1:length(unique(map$group))]) +
  scale_fill_manual(values =color[1:length(unique(map$group))]) +
  theme(panel.grid.major = element_line(color = 'gray', size = 0.2), panel.background = element_rect(color = 'black', fill = 'transparent'), 
        plot.title = element_text(hjust = 0.5)) +
  geom_vline(xintercept = 0, color = 'gray', size = 0.5) +
  geom_hline(yintercept = 0, color = 'gray', size = 0.5) +
  geom_text(data = species_top10, aes(label = name), color = "lightskyblue", size = 3) +    #??? top10 丰度物种标签
  labs(x = pcoa1, y = pcoa2, title = 'PCoA top10丰度物种') 
p
image.png

“作图帮”公众号,免费分享绘图代码及数据,快来关注吧!

你可能感兴趣的:(R语言|绘制主坐标分析PCoA图)