Comments 30
Помимо того, что это очень полезная статья, ещё и примеры изумительно красивые. Спасибо!
graphviz — стандарт, но я так и не мог дождаться завершения ни одного из его укладчиков на графе 10 тысячами связей. Плюс, они не умеют работать инкрементально — приостанавливать и продолжать работу.
В gephi можно поставить graphviz как плагин и пробовать уложить сначала им, а потом какой-то другой укладкой. Но для больших графов это будет бесполезно. Я пользуюсь укладкой dot для мелких графов, тоже через плагин. Удобно, что уложено как дерево, а возможности для анализа из gephi.
Gephi не смог запустить на таком же графе.
С читаемостью можно поработать ещё если настроить отображения. Убрать отрисовку рёбер, потому что их слишком много, уменьшить размер отображения вершин.
Или можно сразу переходить на LargeViz.
Смена дефолтной укладкой на Perforce с OpenCL либо другой аппаратно ускоряемой разительно меняет ситуацию. То что укладывалось на CPU час, стало укладываться за секунды :)
Пока не просек в чем суть проблемы, потерял по сути день, на попытки хоть как то работать с этим графом.
Ну и конечно нужно увеличить дефолтное количество выделяемой памяти, потому что на выделенном 1GB большие графы просто не помещаются при укладке.
Отличная статья. Спасибо.
В своё время, в конце 2011 тоже столкнулся с этими проблемами когда делал карту Интернета internet-map.net (на мобилке лучше не смотреть — испортите впечатление) Поэтому пришлось писать своё решение чтобы обсчитать 350к вершин.
От отображения рёбер тоже пришлось отказатся иначе каша получалась.
Вообще мне кажется настала пора сделать веб сервис который будет на сервере на видяхах все обсчитывать, прикрутить нейронную сеть чтобы она оценивала и подгоняла «под красоту», еще красивую интерактивную веб-морду и можно продавать (:
Такой сервис оставил бы все другие из вашей статьи далеко позади.
Немного оффтоп.
Я пилю утилиту для (в то числе) интерактивной визуализации классифицированных элементов (элемент может относится к одному или более классам). Объемы данных небольшие, не думаю, что они превысят и нескольких сотен. Один класс фактически представляет собой плотный граф, который в каждый элемент связан с каждым. Пытался для лейоута применить банально force-based алгоритм, вариации на тему Fruchterman and Reingold.
Проблема, с которой я столкнулся, заключается в том, что при увеличении количества вершин кластер "сплющивается", потому что силы отталкивания действуют на ближайших соседей, а притягивания — на весь граф, в итоге крайние вершины "сплющивают" середину.
Случайно не знаете, есть какой-то подход к решению таких проблем?
З.Ы. Пробовал сделать примитивный импульсный физический движок с коллизиями, чтобы узлы не проваливались друг в друга, но при большой "силе сжатия" начинаются артефакты вычислений, приходится поднимать количество итераций разрешения столкновений на кадр расчета физики.
Визуализация больших графов для самых маленьких