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

graph visualization in R basis symmetric matrix having values in diagonal

我有一个对称矩阵,我稍微修改了一下:

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

此矩阵表示一个人(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 中做到吗?任何线索将不胜感激

您可以使用 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)