尝试重新创建网络,如何为特定边分配边权重?

Attempting to recreate a network, how to assign edge weight to specific edges?

所以我的任务是重新创建一个特定的网络,如下所示:

虽然我已经能够弄清楚如何使用节点,但我不确定如何为每条边分配宽度。我假设它应该类似于存储为向量的节点 color/shape 来完成。但是我怎么知道确切的边缘是什么?

library(sna)

hw2 <- rbind(
  # 1 2 3 4 5 6 7 8 932 1 2 3 4 8 0 2
  c(0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1),
  c(1,0,1,1,0,0,0,1,0,0,0,0,0,1,1,1,1),
  c(1,1,0,1,0,0,0,1,1,0,0,0,0,1,0,0,0),
  c(1,1,1,0,0,0,0,1,0,0,0,0,1,1,0,0,0),
  c(1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0),
  c(1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0),
  c(1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0),
  c(1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0),
  c(1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
  c(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
  c(1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0),
  c(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
  c(1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0),
  c(1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0),
  c(1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
  c(1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
  c(1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
  )

#Labels
rownames(hw2) <- c("a1","a2","a3","a4","a5","a6","a7","a8","a9","a32","a11","a12","a13","a14","a18","a20","a22")
colnames(hw2) <- c("a1","a2","a3","a4","a5","a6","a7","a8","a9","a32","a11","a12","a13","a14","a18","a20","a22")

#Colors
net_col <-  c(rep("steelblue",8),rep("lightcoral",2),rep("steelblue",8))
edge_col <- c(rep("blue4",) )
#Shape
net_size <-c(rep(4,8),rep(50,2),rep(4,8))

#Network
net_hw2 <- network(hw2,matrix.type="adjacency")

#Graph 1 , similar to existing graph
gplot(net_hw2,vertex.col = net_col,usearrows = F,displaylabels = T,label.pos = 5,
      vertex.cex = 3, vertex.sides = net_size)

您可以使用 gplot 的 edge.lwd 参数为边缘分配宽度。为了匹配您的目标图,我还将使用 edge.col 分配颜色。唯一棘手的部分是弄清楚哪条边是哪条边。我将为 one 设置边缘宽度和颜色 边缘。之后,我会让你去调整其他的。

您可以使用 as.edgelist(net_hw2) 获取所有边。这会根据节点的 数量 给出边。您可以使用列表将节点号与其名称匹配 rownames(hw2)。我将使用 a3 和 a9 之间的边作为示例。该边缘比其他大多数边缘都厚,并且是黄色而不是蓝色。查看 rownames(hw2),我们看到 a3 是节点 3,a9 是节点 9。查看 as.edgelist(net_hw2) 的输出,我们看到边 29 和 51 连接这些节点。

我将制作一个颜色和宽度的矢量,默认颜色为海军蓝,默认宽度为 1。

LWD = rep(1, nrow(as.edgelist(net_hw2)))
COL = rep("navy", nrow(as.edgelist(net_hw2)))

现在我们可以显式更改连接 a3 和 a9 的边的颜色和宽度

LWD[29] = 8
COL[29] = "yellow"
LWD[51] = 8
COL[51] = "yellow"

现在你可以在情节中使用它了

gplot(net_hw2,vertex.col = net_col,usearrows = F, displaylabels = T,
    label.pos = 5, vertex.cex = 3, vertex.sides = net_size, 
    edge.col=COL, edge.lwd=LWD)

现在我们在 a3 和 a9 之间有一个漂亮的黄色宽边。 您可以用相同的方式更改任何其他边的颜色和宽度。