Вершины групп в кластерах с использованием NetworkX

Я пытаюсь представить графически некоторые графики, и мне нужно сгруппировать в кластеры некоторые узлы, которые имеют общие характеристики.

Я использую NetworkX, и мне нужно сделать что-то подобное с графиком из этого урока , начиная с слайда 44, слева.

Я хочу нарисовать линию разграничения вокруг каждого кластера. Мой текущий код выглядит так:

vec = self.colors colors = (linspace(0,1, len (set (vec)))* 20 + 10) nx.draw_circular(g, node_color=array([colors[x] for x in vec])) show () 

Я хочу найти пример и посмотреть, как я могу использовать networkx для кластеризации графика.

One Solution collect form web for “Вершины групп в кластерах с использованием NetworkX”

Я не уверен, в чем ваш вопрос. Я думаю, вы спрашиваете: «Как мне заставить networkx сближать некоторые узлы»

Прежде чем я вернусь к ответу, чертежная документация для networkx находится здесь: http://networkx.lanl.gov/reference/drawing.html

Так что эта цифра, о которой вы спрашиваете, имеет 4 разных сообщества, которые кластеризованы на основе наличия множества ребер внутри каждого сообщества и не многих из них.

Если вы не хотите прилагать к этому много усилий, Spring_layout часто хорош для объединения сплоченных сообществ. Основной алгоритм spring_layout действует так, как будто ребра являются пружинами (и отбрасываются узлы). Таким образом, множество ребер удерживает узлы близко друг к другу. Обратите внимание, что он инициализирует позиции случайным образом, поэтому каждый раз вы получаете другой результат.

Самый простой способ сделать это – просто

 nx.draw_spring(G) 

Но, возможно, вам нужно больше. Если вы хотите, вы можете исправить положение каждого узла. Определите dict, обычно называемый pos.

 pos = {} for node in G.nodes_iter(): pos[node] = (xcoord, ycoord). 

где xcoord и ycoord – координаты, по которым вы хотите, чтобы узел находился.

Затем просто сделайте draw_networkx (G, pos = pos)

Это часто много усилий. Поэтому иногда вы просто говорите, что некоторые из них должны быть в определенных местах, и пусть networkx делает все остальное

Определите fixedpos для нескольких узлов, а затем запустите spring_layout, сообщив ему, какие узлы фиксированы, и давая им fixedpos в качестве начальных позиций. Затем он будет удерживать все фиксированные и все вокруг.

Вот код, который генерирует сеть с 4 полностью связанными частями и несколькими другими ребрами между ними. (на самом деле он генерирует полную сеть, а затем удаляет все, кроме нескольких ребер между этими частями). Затем он рисует его простой макет весны. Затем он фиксирует 4 из них в углах квадрата и помещает другие узлы вокруг этих фиксированных позиций.

 import networkx as nx import random import pylab as py from math import floor G = nx.complete_graph(20) for edge in G.edges(): if floor(edge[0]/5.)!=floor(edge[1]/5.): if random.random()<0.95: G.remove_edge(edge[0],edge[1]) nx.draw_spring(G) py.show() fixedpos = {1:(0,0), 6:(1,1), 11:(1,0), 16:(0,1)} pos = nx.spring_layout(G, fixed = fixedpos.keys(), pos = fixedpos) nx.draw_networkx(G, pos=pos) py.show() 

Вы также можете указать весы по краям, передать весовые значения spring_layout, и более крупные весы скажут ему, чтобы соответствующие узлы были ближе друг к другу. Поэтому, как только вы определили свои сообщества, увеличьте весы в сообществах / кластерах, если это необходимо, чтобы держать их близко друг к другу.

Обратите внимание, что вы также можете указать, какой цвет сделать каждый узел, поэтому прямо указать цвет для каждого сообщества / кластера.

Если вы хотите рисовать кривые вокруг каждого из этих кластеров, вам придется сделать это через matplotlib.

  • Сетевая кластерная группировка
  • Как найти самый длинный путь с Python NetworkX?
  • networkx - изменить цвет / ширину в соответствии с атрибутами края - непоследовательный результат
  • Объедините два взвешенных графика в NetworkX
  • Добавьте граничные веса для вывода вывода в networkx
  • Графический инструмент неожиданно медленный по сравнению с Networkx
  • python networkx: не может использовать функцию current_flow_betweenness_centrality
  • Анимация роста сети с помощью NetworkX и Matplotlib
  • Раскрашивание краев сети по весу
  • Networkx в Python - нарисуйте атрибуты узла как метки вне узла
  • Рисование графика с помощью NetworkX на базовой карте
  • Python - лучший язык программирования в мире.