刚学R没几个星期,现在要做一个相关分析,并以网络图的形式展示结果。
我参考了诸多前人目前写出的代码和达到的效果是这样的。
library(igraph)
library(psych)
library(RcolorBrewer)
Input_file_path<-file.choose()
#打开一个文件选择窗口,选择一个文件返回其路径,请选择你需要输入的.csv文件。
Test_data<-t(read.csv(Input_file_path,header=T, row.names=1))
View(Test_data)#输入需要分析的文件,这里以.csv文件为例
# 计算OTU间两两相关系数矩阵
occor<-corr.test(Test_data,use="pairwise",method="spearman",adjust="fdr",alpha=.05)
occor.r<-occor$r # 取相关性矩阵R值
occor.p<-occor$p # 取相关性矩阵p值
occor.r[occor.p>0.05|abs(occor.r)<0.4] = 0
#将相关性矩阵中显著性p>0.05和相关系数r的绝对值小于0.4的值全都改写为0
# 构建igraph对象
igraph<-graph_from_adjacency_matrix(occor.r,mode="undirected",weighted=TRUE,diag=FALSE)
#去除孤立点
bad.vs<-V(igraph)[degree(igraph) == 0]
igraph<-delete.vertices(igraph, bad.vs)
# 将igraph weight属性赋值到igraph.weight
igraph.weight<-E(igraph)$weight
# 做图前去掉igraph的weight权重,因为做图时某些layout会受到其影响
E(igraph)$weight = NA
#按相关正负相关分别设置边颜色
sum(igraph.weight>0)#正相关
sum(igraph.weight<0)#负相关
E.color = igraph.weight
E.color = ifelse(E.color>0, "red",ifelse(E.color<0, "blue","grey"))
# 改变edge颜色后出图
set.seed(123)
plot(igraph,main=NULL,vertex.frame.color="black",vertex.label=row.names(occor.r),vertex.color=brewer.pal( 12, "Set3")[ 1:vcount(igraph)],edge.width=1,vertex.size=10,edge.lty=1,edge.curved=TRUE,margin=c(0,0,0,0))
此时在RStudio作图框中得到作图结果为图1