我尝试使用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
我感兴趣的是在网络图中表示 - 字段为“节点”,连接为“边缘”。这可能有助于表示最“流行”和互联的领域。这些数据有可能吗?
提前致谢!
编辑:我遇到了this解决方案,这可能对我想要的东西很好:
library(igraph)
G<-graph.incidence(as.matrix(mat1),weighted=TRUE,directed=FALSE)
summary(G)
plot(G)
答案 0 :(得分: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()