上面的矩阵是一个对称矩阵,除了我在对角线中也添加了值(这将说明未来的目的)
此矩阵表示一个人(A,B,C,D,E)在出版物上与其他人合作多少次。例如B和C一起工作了3次,类似地,A和E一起工作了4次。现在对角线值代表一个人单独工作了多少次,例如B从事4个出版物(单独或与他人合作)的工作类似,C从事3个出版物。
现在,我想在R中制作一个网络分析图,该图根据边缘厚度和节点大小描述不同人之间的关系。例如该图应如下所示:
在图中,节点圆的大小取决于一个人从事的出版物的数量,例如圆B最大,因为其对角线值最大,而A和E最小,因为它们的对角线值最低。而且,节点之间的边缘厚度取决于它们一起工作多少次,例如A和E之间的边缘厚度最大,因为它们一起工作4次,而B和C之间的边缘厚度(小于A和E之间的边缘厚度)则是它们一起工作3次。
我可以描述两个人的基本边缘厚度之间的关系,但是对角线值的出现给我带来了问题。可以在R中执行吗?任何线索都将受到高度赞赏
答案 0 :(得分:1)
您可以使用igraph
软件包进行此操作。由于对角线的含义不同于矩阵中的其他条目,因此我将矩阵分为对角线和其余两部分。
SM = as.matrix(read.table(text="A B C D E
1 2 1 1 4
2 4 3 2 1
1 3 3 1 2
1 2 1 2 1
4 1 2 1 1",
header=TRUE))
rownames(SM) = colnames(SM)
library(igraph)
AM = SM
diag(AM) = 0
D = diag(SM)
g = graph_from_adjacency_matrix(AM,
mode = "undirected",
weighted = TRUE)
plot(g,
edge.width=E(g)$weight,
vertex.size = 10+3*D)