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

写在前面

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

微生物网络

输入文件

#--导入所需R包#-------
library(igraph)
library(sna)
library(ggplot2)
library(ggClusterNet)
library(phyloseq)
#-----导入数据#-------
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注释文件,用于分组#-----
vegan_otu <- function(physeq){
OTU <- otu_table(physeq)
if(taxa_are_rows(OTU)){
OTU <- t(OTU)
}
return(as(OTU,"matrix"))
}

ps_net = result[[3]]
otu_table = as.data.frame(t(vegan_otu(ps_net)))

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(4,length(xs$Freq))
r
#----准备圆心坐标,往往与你的设计有关#---------
# 有多少个模块就提供多少个坐标
#--指定坐标吮顺序按照一下指定
xs$Var1
#-------人工准备坐标
ax1 = c(80,40)
ax2 = c(90,30)
ax3 = c(110,40)
ax4 = c(130,50)
ax5 = c(110,10)

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

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

?ArtifCluster
#--------计算布局#---------
#-------计算网络布局-得到节点坐标=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)

地图

library(maptools)
library(sf)

china_map <- rgdal::readOGR('../ori_data/mapdata/China//bou2_4p.shp')
head(fortify(china_map))
chinmap = fortify(china_map)
# chinmap = dplyr::filter(chinmap, group == 0.1)

head(chinmap)
p = ggplot()+geom_polygon(data = chinmap,aes(x=long,y=lat,group=group),colour='grey',fill = "grey80")+#,fill = group
scale_fill_discrete(guide = FALSE)

nine <- sf::st_read('../ori_data/mapdata/add_map//国界九段线.shp')

nine
p
p1 = p +geom_sf(data = nine,aes( geometry = `geometry`),color = "grey30")
p1

northear <- sf::st_read('../ori_data/mapdata/add_map//南海诸岛.shp')

p2 = p1 +geom_sf(data = northear,aes( geometry = `geometry`),color = "grey30")
p2

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 = as.factor(Phylum),size = mean),pch = 21, data = nodes) + scale_colour_brewer(palette = "Set1") +
scale_x_continuous(breaks = NULL) + scale_y_continuous(breaks = NULL)

出图

head(nodes)

pnet <- p2 + 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 = as.factor(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("./8.png",pnet,width = 12,height = 16)

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

世界地图

worldmap <- sf::st_read('../ori_data/mapdata/world//WorldMap.shp')
worldmap
p = ggplot() + geom_sf(data = worldmap ,aes( geometry = `geometry`),fill = "grey80") +#,fill = `ENG_NAME`
scale_fill_discrete(guide = FALSE)
p

nine <- sf::st_read('../ori_data/mapdata/add_map//国界九段线.shp')

nine
p
p1 = p +geom_sf(data = nine,aes( geometry = `geometry`),color = "grey30")
p1
northear <- sf::st_read('../ori_data/mapdata/add_map//南海诸岛.shp')

p1

结合地图

出图

人工指定分组

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

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

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)head(nodes)

pnet <- p1 + 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 = as.factor(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("./9.png",pnet,width = 12,height = 16)

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

(0)

相关推荐

  • NMDS分析

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

  • RDA_环境因子_群落结构_统计检验_可视化

    RDA环境因子群落结构统计检验可视化 环境因子的筛选及数据的转化方面请参阅宏基因组公众号之前的推文,本文主要侧重统计分析与可视化 看到师兄文章里的图自己可能用到,想复现一下,于是就尝试了一下,顺便写个 ...

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

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

  • 展示细胞比例变化之桑基图

    我在CNS图表复现09-上皮细胞可以区分为恶性与否提到了一个很有意思的现象,就是把上皮细胞分群后,可以看到有一些亚群是具有病人特异性,但是也有不少亚群是跨越了病人存在的. 当时我展现这一现象使用的可视 ...

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

    写在前面 对于模块化布局,我们除了按照指定的位置排放之外,在这个包中,我加入了可以自己设置模块位置坐标的参数. 什么原理呢?当你指定一个模块化分组信息的时候,设定按照分组因子水平进行设置坐标即可.如果 ...

  • 大华网络视频监控图像卡顿分析思路和案例总结

    一.理清楚视频卡顿分析思路 1.IPC设备跟电脑直连都卡顿(排除网线和电脑问题)用VLC和WEB,SDK测试DEMO都验证过卡顿.那后续就不用排查其它问题,直接联系研发进行问题处理. 2.直连测试正常 ...

  • 十大冷门网络小说作家,书火人不火,经典神作让人百看不厌

    昨天有一个话题上热搜了,有个网友向大家推荐孙燕姿的歌,说她是冷门歌手,一下给大家逗乐了,于是各种冷门歌手都来了.周杰伦.张学友.林俊杰.陈奕迅.邓紫棋等等. 看到这里,我在想,网文圈有这样的冷门网络作 ...

  • 华为全屋WiFi H6发布 黑科技解决大户型网络覆盖痛点

    5月19日,华为举办全场景智慧生活新品发布会,正式带来了包括华为路由H6在内的多款新品,为消费者打造全屋智能提供了重要的产品支撑.早在4月27日的时候,华为路由H6便已经开启了预约活动,覆盖广.性能强 ...

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

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

  • 电脑换成固态硬盘可提速,如果忽视这2两设置,速度会大打折扣!

    电脑换成固态硬盘可提速,如果忽视这2两设置,速度会大打折扣!

  • 【倒计时】锂电新能源十大领袖网络投票累计超52万,倒计时1天!

    由起点研究旗下的锂电大数据平台联合国内多家知名媒体和研究机构推出的"2017中国锂电新能源产业十大领袖人物评选",网络投票环节进入倒计时阶段,距离投票结束仅剩1天. 此次投票活动于 ...

  • 家中电脑摆放位置6大风水禁忌

    现在的年轻人.上班族几乎每天都要接触计算机,如果一旦网络不通了,恐怕很多人都会抓狂,没有计算机的时代,恐怕很多人都不知道该做什么. 一.请勿将计算机置于你的喜用神方向 计算机置于喜用神方向,会压制你的 ...

  • 尘埃落定!天津首次集中挂牌58宗地,位置信息大公开!

    星标小凤凰~ 3月31日晚间,天津市集中挂牌58宗地块,合计出让土地面积375.5万㎡,挂牌起始总价约合502.9亿元.包含市内六区6宗,环城四区29宗,远郊五区15宗,滨海新区8宗. 其中起始总价最 ...