使用Python igraph绘制社区图

9

我在Python-igraph中有一个图形 g。以下是获取VertexCluster社区结构的方法:

community = g.community_multilevel()

community.membership 可以给我一个列表,其中包含图形中所有顶点所在组的成员资格。

我的问题非常简单,但是我在SO上没有找到特定于Python的答案。如何在可视化其社区结构的情况下绘制图形?最好输出为PDF格式,类似于以下内容:

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

非常感谢。
3个回答

10

使用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)

这将导致以下结果:

输入图像描述

希望这有所帮助。


当我尝试这个时,我会得到以下错误:“TypeError:绘图不可用”。您能为我澄清如何绕过此问题吗?您的图表似乎非常有用。 - Laurie
1
你好。你得到的错误与Igraph用于绘图的某些依赖项有关。请参见我的答案:https://dev59.com/iGct5IYBdhLWcg3wedOP#45416251 - seralouk
这并没有帮助,但对于任何感兴趣的人,我找到了解决方案,即安装Microsoft Visual C++ 14.0,并安装位于此处的Pycairo轮文件:https://www.lfd.uci.edu/~gohlke/pythonlibs/。无论如何,还是谢谢你的尝试。 - Laurie
嗨Seralouk,如果您能查看下面链接中的帖子,我将不胜感激。谢谢。 https://stackoverflow.com/questions/51102350/python-remove-overlapping-communities-in-igraph-plot - Laurie

9

layoutgraphVertexCluster中的顶点保持有序,因此您可以进行如下操作:

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

>>> max(community.membership)
10

然后创建一个包含max + 1个唯一颜色的列表/字典(可能不是像下面这样手动创建):

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

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

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

结果(好漂亮!)

graph


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

谢谢您的快捷方式! - jayelm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接