dagre-d3の非常に複雑なTCP 状態図の例を見た後、同様の複雑さの図を解決できると考えました。次の図では、明らかにそうではありません。2 つのマークされたノードが交換された場合、すべての交差が解決されます。
もう 1 つの興味深い点は、グラフがどれだけうまく解決されるかは、エッジを設定した順序に依存するように見えることです。
次のコード
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: "" });
次の 2 つの例を参照してください。
示唆されたように、代わりに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 と同様に、より構造化されたように見えるように colajs を構成することは可能ですか? そして、dagre は単にこのような問題を解決できないのでしょうか、それともそのように構成することは可能でしょうか?