在 igraph 中提取简化图
Extracting simplified graph in igraph
我有一个看起来像这样的网络
library(igraph)
library(igraphdata)
data("kite")
plot(kite)
我运行一个社区检测,结果是这样的
community <- cluster_fast_greedy(kite)
plot(community,kite)
现在我想提取一个基于社区的网络。边权重应该是社区之间的关系数(社区之间的联系有多强),顶点属性应该是社区中的节点数(称为 numnodes)。
d <- data.frame(E=c(1, 2, 3),
A=c(2, 3, 1))
g2 <- graph_from_data_frame(d, directed = F)
E(g2)$weight <- c(5, 1, 1)
V(g2)$numnodes <- c(4,3,3)
plot.igraph(g2,vertex.label=V(g2)$name, edge.color="black",edge.width=E(g2)$weight,vertex.size=V(g2)$numnodes)
图形应如下所示
一个节点比其他节点大,一条边与其他边相比有很大的权重。
据我所知,igraph
没有计算连接顶点组的边的方法。因此,要计算连接社区的边,您需要遍历每对社区。要计算每个社区的成员,可以使用 sizes
方法。
library(igraph)
library(igraphdata)
data("kite")
plot(kite)
community <- cluster_fast_greedy(kite)
plot(community,kite)
cedges <- NULL
for(i in seq(1,max(community$membership) - 1)){
for(j in seq(i + 1, max(community$membership))){
imembers <- which(community$membership == i)
jmembers <- which(community$membership == j)
weight <- sum(
mapply(function(v1) mapply(
function(v2) are.connected(kite, v1, v2),
jmembers),
imembers)
)
cedges <- rbind(cedges, c(i, j, weight))
}
}
cedges <- as.data.frame(cedges)
names(cedges)[3] <- 'weight'
cgraph <- graph_from_data_frame(cedges, directed = FALSE)
V(cgraph)$numnodes <- sizes(community)
plot.igraph(cgraph,
vertex.label = V(cgraph)$name,
edge.color = "black",
edge.width = E(cgraph)$weight,
vertex.size = V(cgraph)$numnodes)
我有一个看起来像这样的网络
library(igraph)
library(igraphdata)
data("kite")
plot(kite)
我运行一个社区检测,结果是这样的
community <- cluster_fast_greedy(kite)
plot(community,kite)
现在我想提取一个基于社区的网络。边权重应该是社区之间的关系数(社区之间的联系有多强),顶点属性应该是社区中的节点数(称为 numnodes)。
d <- data.frame(E=c(1, 2, 3),
A=c(2, 3, 1))
g2 <- graph_from_data_frame(d, directed = F)
E(g2)$weight <- c(5, 1, 1)
V(g2)$numnodes <- c(4,3,3)
plot.igraph(g2,vertex.label=V(g2)$name, edge.color="black",edge.width=E(g2)$weight,vertex.size=V(g2)$numnodes)
图形应如下所示
据我所知,igraph
没有计算连接顶点组的边的方法。因此,要计算连接社区的边,您需要遍历每对社区。要计算每个社区的成员,可以使用 sizes
方法。
library(igraph)
library(igraphdata)
data("kite")
plot(kite)
community <- cluster_fast_greedy(kite)
plot(community,kite)
cedges <- NULL
for(i in seq(1,max(community$membership) - 1)){
for(j in seq(i + 1, max(community$membership))){
imembers <- which(community$membership == i)
jmembers <- which(community$membership == j)
weight <- sum(
mapply(function(v1) mapply(
function(v2) are.connected(kite, v1, v2),
jmembers),
imembers)
)
cedges <- rbind(cedges, c(i, j, weight))
}
}
cedges <- as.data.frame(cedges)
names(cedges)[3] <- 'weight'
cgraph <- graph_from_data_frame(cedges, directed = FALSE)
V(cgraph)$numnodes <- sizes(community)
plot.igraph(cgraph,
vertex.label = V(cgraph)$name,
edge.color = "black",
edge.width = E(cgraph)$weight,
vertex.size = V(cgraph)$numnodes)