用python igraph绘制社区

jay*_*elm 7 python modularity graph decomposition igraph

g在python-igraph中有一个图形.我可以通过VertexCluster以下方式获得社区结构:

community = g.community_multilevel()
Run Code Online (Sandbox Code Playgroud)

community.membership 给我一个图表中所有顶点的组成员资格列表.

我的问题非常简单,但我还没有找到特定于python的答案.如何使用其社区结构的可视化绘制图形?最好是PDF,所以像

layout = g.layout("kk")
plot(g, "graph.pdf", layout=layout) # Community detection?
Run Code Online (Sandbox Code Playgroud)

非常感谢.

jay*_*elm 6

顶点仍然在有序layout,graphVertexCluster,这样你就可以做这样的事情:

查找社区结构中的社区数量:

>>> max(community.membership)
10
Run Code Online (Sandbox Code Playgroud)

然后创建一个具有max + 1独特颜色的列表/字典(可能不像下面那样手动):

>>> color_list = [
...     'red',
...     'blue',
...     'green',
...     'cyan',
...     'pink',
...     'orange',
...     'grey',
...     'yellow',
...     'white',
...     'black',
...     'purple'
... ]
Run Code Online (Sandbox Code Playgroud)

然后,使用列表推导,根据该顶点的组成员资格创建一个包含每个顶点颜色的列表,并将其分配给vertex_color:

plot(g, "graph.png", layout=layout,
     vertex_color=[color_list[x] for x in community.membership])
Run Code Online (Sandbox Code Playgroud)

结果(太漂亮了!)

图形


Tam*_*más 6

您可以将VertexClustering对象直接传递给绘图函数; 它将自动绘制基础图形,并自动为集群选择颜色.可以像往常一样在layout = ...关键字参数中指定所需的布局.


mak*_*kis 6

绘制社区的好方法可以是以下使用mark_groups:


示例:

from igraph import *
import random
random.seed(1)


g = Graph.Erdos_Renyi(30,0.3)
comms = g.community_multilevel()


plot(comms, mark_groups = True)
Run Code Online (Sandbox Code Playgroud)

这导致以下结果:

在此输入图像描述

希望这可以帮助.