Вершины групп в кластерах с использованием 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.

  • Рисование графика с помощью NetworkX на базовой карте
  • Самый большой компонент NetworkX больше не работает?
  • networkx - изменить цвет / ширину в соответствии с атрибутами края - непоследовательный результат
  • Проверьте, какие атрибуты краев существуют (NetworkX)
  • Прохождение графика с помощью Networkx (Python)
  • Рисование огромного графика с помощью networkX и matplotlib
  • Как извлечь информацию skimage skimage в узлы и ребра NetworkX в python для дальнейшего расширенного анализа
  • Как удалить узел в сети?
  •  
    Interesting Posts for Van-Lav

    Как заставить PyCharm проверять стиль кода PEP8?

    Разбор файла Python: сборка дерева из текстового файла

    Какой самый быстрый способ выбрать функцию Python через VIM?

    Приближение многоугольника с кругом

    Попытка получить кодировку с веб-страницы Python и BeautifulSoup

    шаблон шаблона django templatetags, метод вызова {{}} с контекстной переменной шаблона тега

    Сообщение об ошибке Strange SQLAlchemy: TypeError: объект 'dict' не поддерживает индексирование

    Вызовите exiftool из скрипта python?

    Создание диапазонов цветов в Python

    Как я получаю «InternalError: table» dev ~ guestbook !! Сущности «уже существуют», когда я только что создал хранилище данных?

    Как инвертировать цвета изображения с помощью PIL (Python-Imaging)?

    Django: используйте LayerMapping для обновления существующей модели?

    Python gzip: размер OverflowError не помещается в int

    Пропустить единичный тест из плагина Nose2

    Как заставить Flask / Gunicorn обрабатывать параллельные запросы для одного и того же маршрута?

    Python - лучший язык программирования в мире.