13

I am a newbie to the dot layout in graphviz. I am trying to specify a graph in the dot language, and I want certain sets of nodes to be forced to overlapped by a certain amount (say 70% of their area or something with that effect). I know I can force the x and y positions of nodes and thus induce overlap, but in this case, I am writing a C# program that given certain input spits out the relevant dot script for the graph, so the number of nodes, etc are not hardcoded and so I can't come up with a scheme to hard-code x and y positions of all nodes. Any help in this will be greatly appreciated!

Thanks a lot!

4

2 に答える 2

4

@ninjalj が指摘するように、graphviz の優れた点の 1 つは、グラフを適切に表現し、オーバーラップなどの「欠陥」や「不完全性」を取り除くことができることです。たとえば、overlapやなどの属性を使用しますoverlap_scaling

しかし、あなたは次のように指摘しています。

ノードの x 位置と y 位置を強制してオーバーラップを誘発できることはわかっていますが、この場合、特定の入力が与えられると、グラフに関連するドット スクリプトを吐き出す C# プログラムを作成しているため、ノードの数などは次のようになります。ハードコーディングされていないため、すべてのノードの x 位置と y 位置をハードコードするスキームを思いつくことができません。

つまり、私が見ているように、あなたが言っていることは、特定の入力が与えられると、特定のグラフが生成されることを知っているということです。つまり、ノード (およびクラスター) の数を関数として知っているということです。入力。これは、@Daniel Kinsmanの提案があなたにとって良い方法かもしれない、つまり、その特定の目的のために独自のDOTレイアウトエンジンを実装することだと思います。

これが簡単だとは言いませんが、不可能ではありません。もちろん、必要なロジックはアプリケーションの目的によって大きく異なります。

しかし、実装を行う前に、すでにgraphvizに組み込まれているcluster機能(@Daniel Kinsmanも指摘しています)を見て、カスタムDOTレイアウトエンジンの実装を行うために余分な努力をする価値があるかどうかを考える必要があると思います.クラスター機能で十分かもしれません。

于 2012-09-06T16:11:46.333 に答える
1

これは役に立つかもしれません: ノードとそれらの明示的なレイアウト位置を出力する、graphviz のドット出力形式を使用できます。次に、それを読み込んで、サイズを変更できます。これがあなたの特定のニーズに役立つかどうかを判断するのは難しいです. また、これは最善の解決策ではない可能性があります。使用できるツールの武器庫に追加すると思いました。

于 2012-09-12T01:06:51.557 に答える