Po obejrzeniu dość złożonego TCP state diagram example dagre-d3, doszłam do wniosku, że będzie on w stanie rozwiązać diagramy o podobnej złożoności. Na poniższym diagramie wyraźnie tak nie jest. Jeśli oba zaznaczone węzły zostały zamienione, wszystkie skrzyżowania zostałyby rozwiązane. schematy blokowe w d3js przy użyciu dagre-d3 lub colajs
Inną ciekawą rzeczą jest to, że jak dobry wykres jest rozwiązany wydaje się zależeć od kolejności ustawić krawędzie.
następujący kod
g.setEdge("148570019_1100", "148570020_1100", { label: "" });
g.setEdge("148570019_1100", "148570021_1100", { label: "" });
g.setEdge("148570019_1100", "148570010_1100", { label: "" });
nie dają takie same wyniki jak to:
g.setEdge("148570019_1100", "148570010_1100", { label: "" });
g.setEdge("148570019_1100", "148570020_1100", { label: "" });
g.setEdge("148570019_1100", "148570021_1100", { label: "" });
Zobacz te dwa przykłady:
Jak sugeruje, starałem się używać cola.js zamiast, i to właśnie ten sam wykres wygląda następująco:
Jak widać, colajs jest lepszy na skrzyżowaniu redukcja, ale układ nie jest tak uporządkowany i jasny jak dagre. Używam następujące ustawienia dla colajs:
cola.d3adaptor()
.avoidOverlaps(true)
.convergenceThreshold(1e-3)
.symmetricDiffLinkLengths(20)
.flowLayout('x', 150)
.size([width, height])
.nodes(nodes)
.links(edges)
.constraints(constraints)
.jaccardLinkLengths(300);
Czy jest możliwe aby skonfigurować colajs w sposób, który sprawia, że wyglądają bardziej zorganizowany, podobny do dagre? I czy dagre po prostu nie jest w stanie rozwiązać czegoś takiego, czy też można go skonfigurować tak, jak jest?
czy możesz zilustrować (z obrazem być może), jakie byłoby idealne renderowanie? –
@adarren przepraszam, napisałem to w tekście, ale potem zapomniałem edytować obrazek: jeśli dwa zaznaczone węzły zostały zamienione, wszystkie przejścia zostałyby rozwiązane. – cdMinix
dzięki za aktualizację obrazu. Myślę, że dagre powinien być w stanie obsłużyć twój scenariusz i * myśleć * może być powiązany z twoimi danymi. Czy jesteś w stanie stworzyć jsbin/jsfiddle/etc dla twojego problemu? –