Skip to content

ggClusterNet 多边形模块化排布群落网络(PolygonClusterG)

wentao edited this page Aug 18, 2020 · 1 revision

写在前面

专辑ggClusterNet包今日开始连载,虽然本包中函数不多,但都是精巧实用之辈。相信可以帮助到大家。

devtools::install_github("taowenmicro/ggClusterNet")

多变形排布,将不同的模块按照多变形排布进行。是按照模块内节点数量判断到多变形中心的距离。

微生物网络

输入文件


#--导入所需R包#-------
library(phyloseq)
library(igraph)
library(network)
library(sna)
library(ggplot2)
library(ggClusterNet)

#-----导入数据#-------
ps = readRDS("../ori_data/ps_liu.rds")
ps

corMicro函数用于计算相关

按照丰度过滤微生物表格,并却计算相关矩阵,按照指定的阈值挑选矩阵中展示的数值。

这里我们在早期调用了psych包中的corr.test函数,使用三种相关方法,但是这三种是远远不够的,所以后续我们准备将x剁相关都加入其中。

#-----微生物网络构建参数设置#----
#-提取丰度前百分之多少的otu进行构建网络
# N = 0.02
# r.threshold=0.6
# p.threshold=0.05


#----------计算相关#----
result = corMicro (ps = ps,N = 0.02,r.threshold=0.8,p.threshold=0.05,method = "pearson")

#--提取相关矩阵
cor = result[[1]]
# head(cor)

制作分组,我们模拟五个分组

这是网络布局的基础,无论是什么聚类布局,都需要制作一个分组文件,这个文件有两列,一列是节点,一列是分组信息,这个分组信息名称为:group。

这个文件信息就是用于对节点进行分组,然后按照分组对节点归类,使用包中可视化函数计算节点位置。




#-提取tax注释文件,用于分组#-----


#-提取tax表格--目的是按照分类等级进行分组聚类绘制网络#----

ps_net = result[[3]]


vegan_tax <-  function(physeq){
  tax <-  tax_table(physeq)

  return(as(tax,"matrix"))
}
tax_table = as.data.frame(vegan_tax(ps_net))

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




netClu = data.frame(ID = row.names(otu_table),group =rep(1:5,length(row.names(otu_table)))[1:length(row.names(otu_table))] )
netClu$group = as.factor(netClu$group)
head(netClu)

PolygonClusterG 根据分组,计算布局

不同的模块按照分分组聚集成不同的圆,并且圆形的大小一样。如果一个分组只有一个点,则这个点坐落在圆心位置。

#--------计算布局#---------
#-------计算网络布局-得到节点坐标=node#---------
result2 = PolygonClusterG (cor = cor,nodeGroup =netClu  )

node = result2[[1]]
head(node)

nodeadd 节点注释的简单封装,便捷实用otu表格和分组文件进行注释


ps_net = result[[3]]


vegan_tax <-  function(physeq){
  tax <-  tax_table(physeq)

  return(as(tax,"matrix"))
}

tax_table = as.data.frame(vegan_tax(ps_net))
#---node节点注释#-----------
nodes = nodeadd(plotcord =node,otu_table = otu_table,tax_table = tax_table)
head(nodes)
#-----计算边#--------
edge = edgeBuild(cor = cor,plotcord = node)

head(edge)

出图

pnet <- ggplot() + geom_segment(aes(x = X1, y = Y1, xend = X2, yend = Y2,color = as.factor(wei_label)),
                                data = edge, size = 0.5) +
  geom_point(aes(X1, X2,fill = Phylum,size = mean),pch = 21, data = nodes) +
  scale_colour_brewer(palette = "Set1") +
  scale_x_continuous(breaks = NULL) + scale_y_continuous(breaks = NULL) +
  theme(panel.background = element_blank()) +
  theme(axis.title.x = element_blank(), axis.title.y = element_blank()) +
  theme(legend.background = element_rect(colour = NA)) +
  theme(panel.background = element_rect(fill = "white",  colour = NA)) +
  theme(panel.grid.minor = element_blank(), panel.grid.major = element_blank())
pnet


# pnet <- pnet +  geom_text_repel(aes(X1, X2,label=elements),size=4, data = plotcord)

image

模拟不同分组效果展示

制作分组,我们模拟不同的分组查看效果

这是网络布局的基础,无论是什么聚类布局,都需要制作一个分组文件,这个文件有两列,一列是节点,一列是分组信息,这个分组信息名称为:group。




netClu = data.frame(ID = row.names(tax_table),group =rep(1:3,length(row.names(tax_table)))[1:length(row.names(tax_table))] )
netClu$group = as.factor(netClu$group)
head(netClu)

randomClusterG 根据分组,随机分布计算布局



result2 = PolygonClusterG (cor = cor,nodeGroup =netClu )
node = result2[[1]]
head(node)



### nodeadd 节点注释的简单封装,便捷实用otu表格和分组文件进行注释

# ---node节点注释#-----------
nodes = nodeadd(plotcord =node,otu_table = otu_table,tax_table = tax_table)
head(nodes)

#-----计算边#--------
edge = edgeBuild(cor = cor,plotcord = node)

head(edge)


### 出图

pnet <- ggplot() + geom_segment(aes(x = X1, y = Y1, xend = X2, yend = Y2,color = as.factor(wei_label)),
                                data = edge, size = 0.5) +
  geom_point(aes(X1, X2,fill = Phylum,size = mean),pch = 21, data = nodes) +
  scale_colour_brewer(palette = "Set1") +
  scale_x_continuous(breaks = NULL) + scale_y_continuous(breaks = NULL) +
  # labs( title = paste(layout,"network",sep = "_"))+
  # geom_text_repel(aes(X1, X2,label=Phylum),size=4, data = plotcord)+
  # discard default grid + titles in ggplot2
  theme(panel.background = element_blank()) +
  # theme(legend.position = "none") +
  theme(axis.title.x = element_blank(), axis.title.y = element_blank()) +
  theme(legend.background = element_rect(colour = NA)) +
  theme(panel.background = element_rect(fill = "white",  colour = NA)) +
  theme(panel.grid.minor = element_blank(), panel.grid.major = element_blank())
pnet


# pnet <- pnet +  geom_text_repel(aes(X1, X2,label=elements),size=4, data = plotcord)

image

制作分组,我们模拟不同的分组查看效果 8个分组

这是网络布局的基础,无论是什么聚类布局,都需要制作一个分组文件,这个文件有两列,一列是节点,一列是分组信息,这个分组信息名称为:group。



netClu = data.frame(ID = row.names(cor),group =rep(1:8,length(row.names(cor)))[1:length(row.names(cor))] )
netClu$group = as.factor(netClu$group)
head(netClu)

randomClusterG 根据分组,随机分布计算布局



result2 = PolygonClusterG (cor = cor,nodeGroup =netClu )

node = result2[[1]]
head(node)



### nodeadd 节点注释的简单封装,便捷实用otu表格和分组文件进行注释

# ---node节点注释#-----------
nodes = nodeadd(plotcord =node,otu_table = otu_table,tax_table = tax_table)
head(nodes)

#-----计算边#--------
edge = edgeBuild(cor = cor,plotcord = node)

head(edge)


### 出图

pnet <- ggplot() + geom_segment(aes(x = X1, y = Y1, xend = X2, yend = Y2,color = as.factor(wei_label)),
                                data = edge, size = 0.5) +
  geom_point(aes(X1, X2,fill = Phylum,size = mean),pch = 21, data = nodes) +
  scale_colour_brewer(palette = "Set1") +
  scale_x_continuous(breaks = NULL) + scale_y_continuous(breaks = NULL) +
  # labs( title = paste(layout,"network",sep = "_"))+
  # geom_text_repel(aes(X1, X2,label=Phylum),size=4, data = plotcord)+
  # discard default grid + titles in ggplot2
  theme(panel.background = element_blank()) +
  # theme(legend.position = "none") +
  theme(axis.title.x = element_blank(), axis.title.y = element_blank()) +
  theme(legend.background = element_rect(colour = NA)) +
  theme(panel.background = element_rect(fill = "white",  colour = NA)) +
  theme(panel.grid.minor = element_blank(), panel.grid.major = element_blank())
pnet


# pnet <- pnet +  geom_text_repel(aes(X1, X2,label=elements),size=4, data = plotcord)

image

添加主编微信 加入群聊

image

关于微生信生物 你想要的都在这里

微生信生物