Построение сообществ с помощью python igraph

у меня есть график g в python-igraph. Я могу получить VertexCluster структура сообщества следующим образом:

community = g.community_multilevel()

community.membership дает мне список членства в группе всех вершин в графе.

мой вопрос очень прост, но я не нашел ответа на python на SO. Как построить график с визуализацией структуры сообщества? Желательно в PDF, так что что-то вроде

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

Спасибо большое.

3 ответов


вы можете передать свой объект VertexClustering непосредственно в функцию plot; вместо этого он автоматически построит базовый график и автоматически выберет цвета для кластеров. Нужный макет можно указать в layout=... аргумент ключевого слова как обычно.


вершины остаются упорядоченными в layout, graph и VertexCluster, так что вы можете сделать что-то вроде этого:

найти количество сообществ в структуре сообщества:

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


хорошим способом построения сообществ может быть следующее использование 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

надеюсь, что это помогает.