Data input

Nodes = read.csv('testNodes.csv')
Edges = read.csv('testEdges.csv')
head(Nodes)
##                name            group id
## 1    Aeromonadaceae   Proteobacteria  1
## 2  Alteromonadaceae   Proteobacteria  2
## 3   Amoebophilaceae     Bacteroidota  3
## 4   Arcobacteraceae Campilobacterota  4
## 5 Ardenticatenaceae      Chloroflexi  5
## 6       Bacillaceae       Firmicutes  6
head(Edges)
##            Source          Target corr
## 1  Aeromonadaceae  Caldilineaceae    1
## 2  Aeromonadaceae   Moraxellaceae    1
## 3  Aeromonadaceae  Saprospiraceae   -1
## 4  Aeromonadaceae Fusibacteraceae   -1
## 5 Amoebophilaceae     Woeseiaceae    1
## 6 Amoebophilaceae Microtrichaceae    1

Data organization

Start from 0!!!

nrow(Nodes)
## [1] 47
for (i in 1:47) {
         Edges$Source = gsub(Nodes$name[i], i-1, Edges$Source)
     }
for (i in 1:47) {
      Edges$Target = gsub(Nodes$name[i], i-1, Edges$Target)
}
head(Nodes)
##                name            group id
## 1    Aeromonadaceae   Proteobacteria  1
## 2  Alteromonadaceae   Proteobacteria  2
## 3   Amoebophilaceae     Bacteroidota  3
## 4   Arcobacteraceae Campilobacterota  4
## 5 Ardenticatenaceae      Chloroflexi  5
## 6       Bacillaceae       Firmicutes  6
head(Edges)
##   Source Target corr
## 1      0      7    1
## 2      0     21    1
## 3      0     37   -1
## 4      0     16   -1
## 5      2     45    1
## 6      2     19    1

Add line weight

weight = read.csv('yuanhe_Edges.csv')
Edges = cbind(Edges, weight$Weight) 
colnames(Edges) = c("Source", "Target", "corr", "weight")
# 权重均为正数
Edges$weight = abs(Edges$weight)
Edges$weight = Edges$weight*3

Set line color

# 利用corr列设置颜色 区分正负相关 666
mycolors = ifelse(Edges$corr == 1, "#FF6A6A", "#7CCD7C")

Set node size

# 利用corr列设置颜色 区分正负相关 666
Nodes$size = rep(15, 47)
head(Nodes)
##                name            group id size
## 1    Aeromonadaceae   Proteobacteria  1   15
## 2  Alteromonadaceae   Proteobacteria  2   15
## 3   Amoebophilaceae     Bacteroidota  3   15
## 4   Arcobacteraceae Campilobacterota  4   15
## 5 Ardenticatenaceae      Chloroflexi  5   15
## 6       Bacillaceae       Firmicutes  6   15

Load required packages

library(networkD3)
library(htmlwidgets)
## 
## Attaching package: 'htmlwidgets'
## The following object is masked from 'package:networkD3':
## 
##     JS

Plot!

# 设置clickAction
MyClickScript <- 'alert("Have a rest~")'
# bounded为是否有边界,这里为F;opacity为透明度;charge为斥力大小;显示图例;可以放大或缩小
interactivenetwork = forceNetwork(Links = Edges, Nodes = Nodes, Source = "Source", Target = "Target", NodeID = "name", Group = "group", opacity = 0.8, bounded = F, legend = T, zoom = T, opacityNoHover = TRUE, fontSize = 15, clickAction = MyClickScript, charge = -300, Nodesize = "size", Value = 'weight', linkColour = mycolors)
interactivenetwork
# 通过拖动不同节点可以看出:重要的节点对整个网络结构的影响较大
# 保存为网页
saveWidget(interactivenetwork, "example.html")