Визуализация большого графа, управляемого силой: python и graphviz

Я работаю над алгоритмами обнаружения сообществ и в настоящее время пытаюсь визуализировать результаты алгоритма Лувена (https://arxiv.org/abs/0803.0476) на графе из 70 тысяч узлов и 8 миллионов ребер.

Раньше я строил меньший график (20 тыс. узлов, 650 тыс. ребер) с igraph, черпая вдохновение из Как построить график на основе сообщества с помощью igraph для python, и это заняло почти 30 минут. Построение 70 тысяч узлов и 8 миллионов ребер занимает 8 часов.

Чтобы построить текущий график, из-за производительности я перешел к sfdp (например, sfdp foo.dot -Goutputorder="edgesfirst" -Goverlap=false -Tpdf -O). Однако я не могу добиться хорошего макета, чтобы выделить отдельные сообщества, отдалив их. Я попытался настроить как K на уровне графа, так и len и/или weight на уровне ребра (установив высокие значения для ребер внутри сообщества, например, 1000, и низкие значения для ребер между сообществами, например, 1). sfdp, кажется, игнорирует веса. Тем не менее, как расширение fdp, не должно.

Примеры на небольшом графике

макет igraph + fruchterman_reingold igraph + макет fruchterman_reingold

sfdp

sfdp

Я что-то упускаю? Как я могу выделить различия сообщества, как это сделано в приведенной выше ссылке?


person w4bo    schedule 07.09.2018    source источник
comment
Возможно, вы захотите попробовать этот подход: в основном: 1) разделите ваш узлы в сообщества; 2) для каждого сообщества определить положение узлов независимо; 3) создать новый граф, где каждый узел соответствует сообществу, а ребра соответствуют сумме ребер/весов между сообществами; 4) позиционные сообщества; 5) разумно комбинировать макеты.   -  person Paul Brodersen    schedule 12.09.2018
comment
Вы можете рассмотреть Gephi. Вы можете приостановить расчет силы, как только она стабилизируется.   -  person jonincanada    schedule 31.01.2019