Я работаю над алгоритмами обнаружения сообществ и в настоящее время пытаюсь визуализировать результаты алгоритма Лувена (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
sfdp
Я что-то упускаю? Как я могу выделить различия сообщества, как это сделано в приведенной выше ссылке?