Построение сообществ с помощью 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])
результат (это так красиво!)
хорошим способом построения сообществ может быть следующее использование 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)
это приводит к следующему:
надеюсь, что это помогает.