python - 通过任何 python 或 R 模块可视化图中重叠的社区

标签 python r networkx visualization igraph

如果图表中存在重叠社区,如何可视化社区? 我可以使用 python(networkx、igraph、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']]

我想要一个将社区可视化的图,如下所示。

enter image description here

在networkx中,可以对每个节点进行颜色编码,例如this post ,但当社区重叠时,此方法不适合。

在 igraph 中,可以使用包中包含的社区提取方法来可视化社区,如 this post 中所述。 。但是,就我而言,我想使用每个社区中包含的节点列表来定义社区。

最佳答案

下面是 Rigraph 的一个选项。


我认为您可能需要手动注释社区信息(请参阅下面的 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)

enter image description here

数据

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")
)

关于python - 通过任何 python 或 R 模块可视化图中重叠的社区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74609794/

相关文章:

python - 如何控制 cython cdef 类的模块/名称?

r - 图片作为 Shiny 仪表板的背景

python - 如何通过DFS遍历获得边权重和节点到节点

python - 在 Debian wheezy 上安装 python3-networkx

android - 通过蓝牙将字符串发送到 Arduino 上的 Android 设备

python - Matplotlib 添加基于现有颜色系列的图例

python - 显示返回 'Mean of empty slice'的行

R - 根据位置将纬度/经度点的巨大数据帧分组

r - 在 R 中创建连接矩阵以计算共享成员资格

python - 从 Pandas DataFrame 创建 NetworkX 图