如果图中有重叠的社区,我如何可视化社区?我可以使用python中的任何模块(networkx、in、matplotlib等)。或R.
例如,每个社区的节点、边缘和节点的信息如下所示。注意,节点G跨越两个社区。
list_nodes = ['A', 'B', 'C', 'D','E','F','G','H','I','J']
tuple_edges = [('A','B'),('A','C'),('A','D'),('B','C'),('B','D'), ('C','D'),('C','E'),
('E','F'),('E','G'),('F','G'),('G','H'),
('G','I'), ('G','J'),('H','I'),('H','J'),('I','J'),]
list_communities = [['A', 'B', 'C', 'D'],['E','F','G'],['G', 'H','I','J']]我想要一个图形化的社区,如下图所示。

在networkx中,可以对每个节点(如this post )进行彩色编码,但当社区重叠时,这种方法并不适合。
在igraph中,可以使用包中包含的社区提取方法来可视化社区,如this post中所描述的那样。但是,在我的例子中,我希望使用每个社区中包含的节点列表来定义社区。
发布于 2022-11-29 09:42:56
下面是igraph在R中的一个选项。
我认为您可能需要手动注释社区信息(见下面的grp ),然后在绘图时使用它,例如,
g <- graph_from_data_frame(df, directed = FALSE)
grp <- lapply(
groups(cluster_edge_betweenness(g)),
function(x) {
c(
x,
names(which(colSums(distances(g, x) == 1) > 1))
)
}
)
plot(g, mark.groups = grp)或者使用最小大小的max_cliques 3 (感谢@clp的评论)
g <- graph_from_data_frame(df, directed = FALSE)
grp <- max_cliques(g, min = 3)
plot(g, mark.groups = grp)

数据
df <- data.frame(
from = c("A", "A", "A", "B", "B", "C", "C", "E", "E", "F", "G", "G", "G", "H", "H", "I"),
to = c("B", "C", "D", "C", "D", "D", "E", "F", "G", "G", "H", "I", "J", "I", "J", "J")
)https://stackoverflow.com/questions/74609794
复制相似问题