74

私はgraphvizで作成したグラフを持っていますが、問題はエッジが互いに重なっていることです(各行に5〜7個のノードがあります)。そのため、ノードごとに接続するノードを判別するのは困難です。

エッジが互いに重ならないようにするにはどうすればよいですか?交差させても大丈夫です。

4

3 に答える 3

50

ドットでレイアウトした有向グラフがあると仮定します。

エッジの重なりを防ぐための魔法のスイッチはないと思います。Graphvizは、箱から出してそれを実行しようとします。

グラフに応じて役立つ可能性のあるいくつかの提案:

  • エッジコンセントレーター(concentrate = true):共通の端点を持つ複数のエッジを単一のエッジにマージし、部分的に平行なエッジがパスの一部を共有するようにします。
  • ポート:エッジは、特定のポート(n、ne、e、se、s、sw、w、nw、w、c、_)に起点と終点を持つことができます。エッジポートに応じて、エッジはその形状(スプライン)を変更します。
  • 不可視ノード:ルートエッジに不可視ノードを導入すると、望ましい効果が得られる場合があります。
于 2011-01-12T16:53:04.223 に答える
24

別のアプローチは、グラフにオーバーラッププロパティを追加することです。許容されるプロパティは、scale(出力のサイズを大幅に増加させる)またはfalse(サイズをそれほど増加させないが、エッジがノードとオーバーラップする可能性がある)です。

overlap = scale;

オーバーラップ=falseを使用している場合は、属性を追加することでノードとのエッジのオーバーラップを取り除くことができますsplines=true:

overlap = false;
splines = true;

これにより、大きなグラフの生成時間が著しく遅くなります。

于 2011-10-31T13:50:30.623 に答える
13

非常に些細なグラフでも、graphvizneatofdp)がオーバーラップを生成していることがわかります。例えば:

graph G {
0;
1;
2;
3;
0--1 ;
1--2 ;
2--3 ;
3--0 ;
}

私のバージョンのコードでクロスを生成します2.38.0

ドキュメントから、これらの場合はさまざまなランダムシードを試すことをお勧めします。最終的には、より複雑な図の交差が避けられなくなりますが、エンジンが交差を回避するためにどれだけの努力を払うかはわかりません。

たとえば、これは私のために働いた:

neato -Gstart=5 file.dot -Tps -o file.ps
于 2015-01-06T18:30:51.167 に答える