Направленный ациклический граф в d3.js

Существует ли сегодня надежный способ рисования ориентированных ациклических графов в D3.js? Я пытаюсь визуализировать предварительные условия в учебной программе, подобно этому.

Я видел несколько более старых ответов на похожие вопросы, наиболее перспективным из которых был этот взлом, хотя он не работает надежно с большими и сложными наборами данных.

Это просто редкий случай визуализации, для которой D3 не идеален?


person Chris Fritz    schedule 29.10.2014    source источник
comment
В D3 нет макета для достижения этого, если вы это имеете в виду.   -  person Lars Kotthoff    schedule 29.10.2014


Ответы (2)


Вы можете попробовать dagre, JS-библиотеку для графиков DAG.

Если вы хотите использовать d3 по какой-либо причине, взгляните на dagre-d3.

Для более высокоуровневого подхода посмотрите этот проект, используя все вышеперечисленные библиотеки.

Если d3 не является обязательным, посмотрите также другие графические библиотеки. ;)

Обновление за сентябрь 2018 г.

Существует новая библиотека под названием d3-dag.

person MarcoL    schedule 29.10.2014
comment
Я видел dagre, но D3 используется в другом месте проекта, и мне очень нравится его мощь, поэтому я стараюсь не добавлять еще одну библиотеку визуализации, если в этом нет крайней необходимости. Тот факт, что dagre-d3 больше, чем полная библиотека d3, меня тоже не особо радует. - person Chris Fritz; 30.10.2014
comment
Понимаю. dagre-d3 включает также lo-dash, так что, возможно, это причина размера. dagre сам по себе работает как модуль макета, и вы можете найти способ использовать его с d3 - это лучший иерархический / dag-макет с открытым исходным кодом, ИМХО. - person MarcoL; 30.10.2014
comment
@MarcoL dagre кажется заброшенным This project is not being actively developed or maintained. Dagre также собран с d3 v3. Есть ли альтернатива d3 v4 поблизости? - person Tucker; 13.12.2016
comment
Я обновил ответ. TBH Я думаю, что все же стоит использовать dagre-d3, разветвив его и используя более новую версию d3. - person MarcoL; 13.12.2016
comment
@Tucker/все — dagre снова работает и теперь поддерживает d3 v4/v5 - person Sphinxxx; 17.08.2018

Поздно, но, возможно, актуально для других, ищущих аналогичную информацию...

Elkjs поддерживает макет многоуровневого графа и в настоящее время активно поддерживается.

Некоторые предлагаемые варианты компоновки на основе варианта использования OP...

layoutOptions: {
        'org.eclipse.elk.algorithm': 'layered',
        'org.eclipse.elk.direction' : 'DOWN',
        'org.eclipse.elk.edgeRouting': 'SPLINES',
        'org.eclipse.elk.layered.edgeRouting.sloppySplineRouting': false,
        'org.eclipse.elk.layered.layering.strategy': 'INTERACTIVE' }

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

person DanM    schedule 30.10.2017
comment
Большая проблема elkjs заключается в том, что он использует sprotty вместо d3, и нет простого примера копирования и вставки, чтобы попробовать его в вашей среде. Но я использовал предшественника elkjs - klayjs, и он отлично работает. У него простой пример и мост klayjs-d3. - person NtsDK; 26.03.2018
comment
elkjs не использует ни sprotty, ни D3. Это просто библиотека макетов. Вы сами позаботитесь о рендеринге, выбрав библиотеку рендеринга (например, sprotty, D3 и т. д.). - person Miro Spönemann; 20.04.2018
comment
Я добавлю, что elkjs, вероятно, является одним из лучших движков компоновки рабочего процесса. - person amcdnl; 09.03.2020
comment
Я создал проект на elkjs для реагирования — reaflow.io, который может вас заинтересовать. - person amcdnl; 10.02.2021