美文网首页R作图
PCoA主坐标分析绘图

PCoA主坐标分析绘图

作者: 鼓吉石 | 来源:发表于2022-03-15 19:35 被阅读0次

    成品图:

    Rplot.png

    思路

    数据-预处理-计算距离-pcoa处理-画图

    所需数据:

    OTU聚类表

    otu.png

    分组表,根据研究目的和作图需求,把OTU表的每一项数据都分类。

    如例图,按颜色分12类


    颜色.png

    按形状分为两类


    形状.png

    备注

    pcoa分析作图最主要的思想就是分类,按照实验设计和数据进行分类。比如例子中有两组实验:大豆组(soybean)和玉米组(maize),每组实验有12个不同的处理方法:CF,CH,CK...而进行pcoa分析的目的就是要直观的看出实验组和对照组之间的区别,所以首先要对实验组进行分组(分为soybean组和maize组)其次对不同的处理方法进行分类(CF,CH...)。
    而在绘图时,有两个参数用来直观的区别不同的内容,颜色和形状。对于组数少的分组进行形状区分,对于组数多的进行颜色区分。即该例中不同的实验组用形状区分,不同的处理方法用颜色区分。

    预处理

    。对于OTU表:去掉其他内容,只留OTU列和所有的聚类列
    。新建两个分组表,第一列为OTU表中各个聚类的名字,第二列为分组名称

    用R处理数据

    #载入需要用到的包
    > library(vegan)
    > library(ggplot2)
    > library(ggrepel)
    > library(openxlsx)
    #读取数据
    > group_s <- read.xlsx("C:/Users/RNG/Desktop/shape.xlsx",sheet = 1)#形状分组数据
    > group_c <- read.xlsx("C:/Users/RNG/Desktop/group.xlsx",sheet = 1)#颜色分组数据
    > df <- read.xlsx("C:/Users/RNG/Desktop/OTU2.xlsx",sheet = 1)#OTU数据
    #对OTU表预处理:将第一列OTU序号变为行名后删除。因为下一步需要转置OTU表,而第一列OTU序号为字符型,在转置后会将全部的数据变为字符型,所以需要该步处理
    > rownames(df) <- df$OTU#将df数据框中的OTU列变为df的行名
    > df1 <- df[,-1]#删去df数据框的第一列并输入给新的数据框df1
    > df1 <- t(df1)#转置
    > group_c$group <-  as.factor(group_c$group)#将分组列转换为因子类型,以便于画图时使用
    > group_s$shape <-  as.factor(group_s$shape)#同上
    #数据处理——计算距离
    > distance <- vegdist(df1,method = "bray")#使用vegdist函数计算距离(需要计算的数据,method=“所计算的距离类型,通常为bray”)
    #数据处理——pcoa分析
    > pcoa <- cmdscale(distance,k=2,eig = TRUE)#使用cmdscale函数进行pcoa分析(上一步计算的距离,k=需要降维到几维通常为2维,eig=TRUE为返回eig值下面计算置信区间需要用到)
    > plot_data <- data.frame({pcoa$points})#将上步pcoa分析结果中的points转换为数据框并赋值给plot_data,该数据在画图时需要使用
    > eig <- pcoa$eig#将pcoa处理返回结果中的eig赋值,下面计算置信区间需要用到
    > data <- data.frame(group_c$group,group_s$shape,plot_data)#将两个分组列和经过pcoa处理后的point数据整合赋值给data以便于画图使用
    > names(data) <- c("c","s","PCoA1",'PCoA2')#对data列命名
    #画图
    >ggplot(data=data,aes(x=PCoA1,y=PCoA2,shape=s,color=c))#基础图层,(数据,映射(x=数据中作为x的列,y=数据中y的列,shape=数据中按形状分组的列,color=数据中按颜色分组的列))
    +geom_point(alpha=1,size=2)#geom-point函数为散点图函数,(alpha控制图形的半透明度,越小越透明,size控制点的大小)
    +stat_ellipse(aes(fill=s),type = "norm",geom="polygon",alpha=0.2,color=NA)#stat-ellipse为绘制椭圆的函数(aes(fill=你想用椭圆圈住的分组列,例子中圈主的是形状),type=椭圆对应的概率分布,默认为t分布,norm为多元分布,geom=控制图形的几何对象,通常为polygon,color=椭圆边界颜色)
    +labs(x=paste("PCoA1(",format(100*eig[1]/sum(eig),digits = 4),"%)",sep=""),y=paste("PCoA2(",format(100*eig[2]/sum(eig),digits = 4),"%)",sep=""))#labs函数为给图形横纵轴加标签,100*eig[2]/sum(eig)为计算置信度的公式
    +geom_vline(aes(xintercept=0),linetype="dotted")#添加参考线,也就是例子中的虚线,vline为纵向参考线,hline为横向,xintercept=为参考线与x轴的交点,linetype="dotted"为虚线
    +geom_hline(aes(yintercept=0),linetype="dotted")
    +theme(panel.background = element_rect(fill='white',colour = 'black'),axis.title.x=element_text(colour = 'black',size=20),axis.title.y = element_text(colour = 'black',size=20),legend.text = element_text(size = 15))#theme函数控制背景参数,panel.background为画布参数设置,fill为背景颜色,colour为图边框颜色。axis.title.x=element_text(colour = 'black',size=20),axis.title.y = element_text(colour = 'black',size=20)为设置坐标轴标签文本的颜色大小。legend.text = element_text(size = 15)为设置图中示例的文字大小
    
    
    

    相关文章

      网友评论

        本文标题:PCoA主坐标分析绘图

        本文链接:https://www.haomeiwen.com/subject/xehydrtx.html