2

我试图制作一个网络图,使用gplot来自library(sna). 该图将表示不同字段之间的链接。我有以下数据:

MTM <- c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1)
FI <- c(0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
MCLI <- c(0,0,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1)
mat1 <- data.frame(MTM,FI,MCLI)
mat1 <- as.matrix(mat1)

其中“MTM”、“FI”和“MCLI”是“感兴趣的领域”,每一行都是一个不同的项目,有一些/任何/没有共同的领域。我怎样才能将这些数据转换成这样?

matx:   
       MTM   FI   MCLI
MTM     10    0   1
FI       0    1   1
MCLI    10    1   17

我有兴趣在网络图中将字段表示为“节点”,将连接表示为“边”。这可能有助于代表最“流行”和相互关联的领域。这些数据有可能吗?

提前致谢!

编辑:我遇到了这个解决方案,这对于我想要的可能没问题:

library(igraph)
G<-graph.incidence(as.matrix(mat1),weighted=TRUE,directed=FALSE)
summary(G)
plot(G)
4

1 回答 1

2

这是根据您的数据制作网络图的一种方法,其中每个节点都是“感兴趣的领域”。请注意,我根据您的原始数据制作了一个对称邻接矩阵,该矩阵与您所需的矩阵输出不完全匹配。

library(igraph)

# Use matrix multiplication to create symmetrical adjacency matrix.
adj_mat = t(mat1) %*% (mat1)

# Two ways to show edge weights.
png("igraphs.png", width=10, height=5, units="in", res=200)
par(mfrow=c(1, 2))

g1 = graph.adjacency(adj_mat, mode="undirected", diag=FALSE, weighted=TRUE)
plot(g1, edge.width=E(g1)$weight, vertex.size=50)

g2 = graph.adjacency(adj_mat, mode="undirected", diag=FALSE)
plot(g2, vertex.size=50)

dev.off()

在此处输入图像描述

于 2013-05-09T23:21:25.060 回答