具有对角线值的R基对称矩阵中的图形可视化

时间:2019-03-29 15:54:09

标签: r graph network-analysis

我有一个对称矩阵,对此我做了一点修改: Sample Data

上面的矩阵是一个对称矩阵,除了我在对角线中也添加了值(这将说明未来的目的)

此矩阵表示一个人(A,B,C,D,E)在出版物上与其他人合作多少次。例如B和C一起工作了3次,类似地,A和E一起工作了4次。现在对角线值代表一个人单独工作了多少次,例如B从事4个出版物(单独或与他人合作)的工作类似,C从事3个出版物。

现在,我想在R中制作一个网络分析图,该图根据边缘厚度和节点大小描述不同人之间的关系。例如该图应如下所示:

Final Graph

在图中,节点圆的大小取决于一个人从事的出版物的数量,例如圆B最大,因为其对角线值最大,而A和E最小,因为它们的对角线值最低。而且,节点之间的边缘厚度取决于它们一起工作多少次,例如A和E之间的边缘厚度最大,因为它们一起工作4次,而B和C之间的边缘厚度(小于A和E之间的边缘厚度)则是它们一起工作3次。

我可以描述两个人的基本边缘厚度之间的关系,但是对角线值的出现给我带来了问题。可以在R中执行吗?任何线索都将受到高度赞赏

1 个答案:

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

Weighted graph