人工设置网络模块位置-发挥你对可视化的最大潜能

写在前面

对于模块化布局,我们除了按照指定的位置排放之外,在这个包中,我加入了可以自己设置模块位置坐标的参数。

什么原理呢?当你指定一个模块化分组信息的时候,设定按照分组因子水平进行设置坐标即可。如果分组信息是字符串,就转化为因子对象,按照因子对象设置坐标位置。

微生物网络:实践

输入文件

#--导入所需R包#-------
library(igraph)
library(network)
library(sna)
library(ggplot2)
library(ggrepel)
library(ggClusterNet)
#-----导入数据#-------
ps = readRDS("../ori_data/ps_liu.rds")
ps

corMicro函数用于计算相关

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

#-----微生物网络构建参数设置#----
#-提取丰度前百分之多少的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))

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

人工指定分组

这里一共有五个组,所以我设定了五个坐标,然后合并为一个数据框即可。

##-----人工置顶半径大小和圆心位置

#--这里我设置r都是相同的,也可以设置不同,然后包装成一个向量就可以了#-------
xs = as.data.frame(table(netClu$group))
r = rep(15,length(xs$Freq))
r
#----准备圆心坐标,往往与你的设计有关#---------
# 有多少个模块就提供多少个坐标
#--指定坐标吮顺序按照一下指定
xs$Var1
#-------人工准备坐标
ax1 = c(120,0)
ax2 = c(130,-30)
ax3 = c(140,-70)
ax4 = c(130,-110)
ax5 = c(120,-140)

da = rbind(ax1,ax2,ax3,ax4,ax5)

rArtifCluster根据分组,人工指定布局

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

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

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

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)))

#---node节点注释#-----------
nodes = nodeadd(plotcord =node,otu_table = otu_table ,tax_table = tax_table)
head(nodes)
#-----计算边#--------
edge = edgeBuild(cor = cor,plotcord = node)

head(edge)

示意图出图

人工设置坐标用于什么场景呢?这里的植物是一个典型的例子,譬如我们要做植物的不同区域网络等,就可以设置坐标,放置到对应的位置上。我们在这里使用gganatogram包中的示意图,当然你也可以使用自定义的位图图片。

#载入所需R包#---------
library(gganatogram)
library(viridis)
# library(gridExtra)

organism = "solanum_lycopersicum.whole_plant"

data =other_key[[organism]]
library(scales)
show_col(data$colour)
data$colour =c("#4DAF4A")
# data$colour[1] = ""
# , sex='female', fill="colour"
p = gganatogram(data=data, organism=organism,ggplot2_only = TRUE,fillOutline='#a6bddb',fill = "colour") +
# theme_void() +
ggtitle(organism) +
theme(plot.title = element_text(hjust=0.5, size=9))

p

出图

pnet <- p + 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)

添加指向箭头,方便标识

#--------按照每个部分添加一个箭头
da2 = data.frame(x = da[,1] -50,y = da[,2])
da = as.data.frame(da)
colnames(da) = c("x0","y0")
da3 = cbind(da2,da)
da3
p2 = pnet + geom_segment(aes(x = x, y = y, xend = x0, yend = y0),data = da3,arrow = arrow(length = unit(0.2,"cm")))
p2

ggsave("6.png",p2)

其他示意图

##-----人工置顶半径大小和圆心位置

#--这里我设置r都是相同的,也可以设置不同,然后包装成一个向量就可以了#-------
xs = as.data.frame(table(netClu$group))
r = rep(15,length(xs$Freq))
r
#----准备圆心坐标,往往与你的设计有关#---------
# 有多少个模块就提供多少个坐标
#--指定坐标吮顺序按照一下指定
xs$Var1
#-------人工准备坐标
ax1 = c(0,0)
ax2 = c(150,-10)
ax3 = c(140,-70)
ax4 = c(130,-110)
ax5 = c(0,-140)

da = rbind(ax1,ax2,ax3,ax4,ax5)

### rArtifCluster根据分组,人工指定布局

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

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)
#载入所需R包#---------
p = gganatogram(data=other_key[["bos_taurus"]], outline = T, fillOutline='white', organism="bos_taurus", sex='female', fill="colour") +
# theme_void() +
ggtitle("bos_taurus") +
theme(plot.title = element_text(hjust=0.5)) +
coord_fixed()
p

pnet <- p + 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

ggsave("7.png",pnet)

后记

其实微生物网络在大尺度范围内的应用也是相当广泛,所以网络布局结合地图的展示,我们在下一节,将代码送给大家。如果ggClusterNet帮助到了你,请致谢微生信生物,参考如下:“Thanks to the WeChat subscription account “Micro-Bioinformatics and microflora” sharing the analysis method tutorial. ”

如果使用ggClusterNet,可以暂时添加参考文献:“Yuan J, Zhao J, Wen T, Zhao M, Li R, Goossens P, Huang Q, Bai Y, Vivanco JM, Kowalchuk GA, Berendsen RL, Shen Q Root exudates drive the soil-borne legacy of aboveground pathogen infection Microbiome 2018,DOI: doi: 10.1186/s40168-018-0537-x”

(0)

相关推荐

  • Vue+Element Table 列标红

    效果图 列方法 调用 判断 table 数据里有ID为479的吗没,有的话就标记该列为红色 样式

  • 【R数据处理】随机森林机器学习法

    " 知其然,也要知其所以然."   --科白君 "R数据分析"专题·第14篇   编辑 | free傻孩子   5021字 |13分钟阅读 本期推送内容 机器学 ...

  • NMDS分析

    " No one knows everything, and you don't have to."   --free傻孩子 "R数据分析"专题·第15篇   ...

  • 人工设置网络模块位置2-大尺度空间网络布局应用

    写在前面 多变形排布,将不同的模块按照多变形排布进行.模块越大的部分,其半径越大,是按照模块内节点数量判断到多变形中心的距离. 微生物网络 输入文件 #--导入所需R包#------- library ...

  • 别墅风水:如何设置游泳池位置?李双林

    主讲:李双林 内容简介:大家好,我是李双林.我们今天来讲一讲如何确定游泳池的方位?游泳池的特点,大多数的游泳池在夏季的时候,就有很多清澈的水,到了秋冬或初春,就会变得干枯,所以是一种不稳定的水. 如果 ...

  • 别墅风水:如何设置游泳池位置 李双林

    主讲:李双林 内容简介:大家好,我是李双林.我们今天来讲一讲如何确定游泳池的方位?那么像现在很多人特別是一些别墅,他会在别墅的周围弄一个游泳池.还有现在很多人在农村修房子,很多人在老家修別墅,房子修的 ...

  • PPT办公技巧:灵活设置倒计时位置、时长、显示样式、结束提醒

    大家好,这篇文章跟大家分享如何运用OneKey Lite插件为幻灯片添加倒计时,以及设置倒计时的位置.时长.显示样式.结束提醒. 操作步骤: 1.通过网络搜索OneKey Lite插件并安装在电脑中, ...

  • 找准自己的位置,才能激发出自己的潜能

    每个人都是一个独特的个体,每个人也都有其生活在这个世界上的价值,不同的是我们的岗位和职责.适合自己的才是最好的,不适合自己的东西,再昂贵.再漂亮,都只是过眼云烟.昙花一现. 即便此刻的你性格很内向,内 ...

  • 钉钉外勤打卡位置可以自己设置吗

    外勤打卡适合员工外出.出差.在家办公.异地办公等非固定地址场景打卡的应用,那钉钉外勤打卡位置可以自己设置吗. 钉钉外勤打卡不支持员工手动选择打卡位置,也不支持员工微调自己的定位进行打卡. 员工在外勤打 ...

  • 手机搜狗地图怎么设置家的位置?

    在地图上设置了家的位置,那么以后就不用每次都在搜索框输入位置信息了,还可一键快速导航回家,可以节省不少时间,那么怎样设置家的位置呢? 打开手机搜狗地图以后,点击应用底部的"路线", ...

  • 对方电话不接找不到人怎么办?打开这个设置,对方的位置一清二楚

    对方电话不接找不到人怎么办?打开这个设置,对方的位置一清二楚

  • 人工牙排列位置与咬合关系

    人工牙是直接对食物产生破碎的装置,因此人工牙的排列位置和上下牙之间相对的关系都直接影响到全口义齿的稳定,人工牙排列应当遵循以下原则: 1.中性区原则:天然牙存在时,唇颊舌作用在牙齿上的力量相互平衡,当 ...