2014-02-24 163 views
5

python-igraph中有一个图g。我可以得到一个VertexCluster社会结构如下:使用python绘制社区igraph

community = g.community_multilevel() 

community.membership让我在图中的所有顶点组成员的名单。

我的问题很简单,但我没有在SO上找到python特定的答案。我如何绘制其社区结构的可视化图?最好为PDF,所以像

layout = g.layout("kk") 
plot(g, "graph.pdf", layout=layout) # Community detection? 

非常感谢。

回答

6

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

+0

感谢您的捷径! – jayelm

6

顶点保持在layout,有序和VertexCluster,所以你可以做这样的事情:

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

>>> max(community.membership) 
10 

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

>>> color_list = [ 
...  'red', 
...  'blue', 
...  'green', 
...  'cyan', 
...  'pink', 
...  'orange', 
...  'grey', 
...  'yellow', 
...  'white', 
...  'black', 
...  'purple' 
... ] 

然后,使用列表理解,创建一个包含每个顶点的颜色列表基于该顶点的组成员,并分配给:

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

结果(这是这么漂亮!)

graph

3

一个很好的方式来绘制社区可以是以下使用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) 

这将导致以下:

enter image description here