Увидев довольно сложный пример диаграммы состояния TCP dagre-d3, я решил, что он сможет разрешить диаграммы аналогичной сложности. На следующей диаграмме это явно не так. Если два отмеченных узла были заменены, все пересечения будут разрешены.
Еще одна интересная вещь заключается в том, что, насколько хорош график, по-видимому, зависит от порядка, в который я устанавливал ребра.
Следующий код
g.setEdge("148570019_1100", "148570020_1100", { label: "" });
g.setEdge("148570019_1100", "148570021_1100", { label: "" });
g.setEdge("148570019_1100", "148570010_1100", { label: "" });
не дает таких же результатов, как это:
g.setEdge("148570019_1100", "148570010_1100", { label: "" });
g.setEdge("148570019_1100", "148570020_1100", { label: "" });
g.setEdge("148570019_1100", "148570021_1100", { label: "" });
Смотрите два примера:
Как и было предложено, я попытался использовать cola.js, и вот как выглядит тот же граф:
Как вы видите, colajs лучше справляется с сокращением, но макет не настолько структурирован и прозрачен, как у dagre. Я использую следующие настройки для colajs:
cola.d3adaptor()
.avoidOverlaps(true)
.convergenceThreshold(1e-3)
.symmetricDiffLinkLengths(20)
.flowLayout('x', 150)
.size([width, height])
.nodes(nodes)
.links(edges)
.constraints(constraints)
.jaccardLinkLengths(300);
Можно ли настроить колажи таким образом, чтобы он выглядел более структурированным, похожим на dagre? И дагр просто не может решить что-то подобное, или можно настроить его таким образом, каким он есть?