web-dev-qa-db-ja.com

ドットで垂直(垂直または水平)エッジを強制する

ノード間の垂直エッジまたは水平エッジのみをドット表示するように強制したい。

私は同様のリクエストを投稿 Dot/GraphVizによるファミリーツリーレイアウト で見つけましたが、私はツリーを扱っていないので、余分なノードを挿入せずに解決策があることを願っています...

次のグラフを作成するとします。

ダイグラフG {
 
 splines = ortho 
 
 A [shape = box] 
 B [shape = box] 
 C [shape = box] 
 D [shape = box] 
 
 A-> B 
 A-> C 
 
 B-> D 
 C-> D 
 
} 

私が得るものはこれです:

enter image description here

しかし、私はこのようなグラフが欲しい:

enter image description here

どうすればこのようなレンダリングを取得できますか?

編集:「スプライン」属性が期待どおりに機能していないようです...何か間違ったことはありますか?

27
nocbos

構文は正しいようです。実行すると、(一種の)直交エッジルーティングが表示されます。

enter image description here

どのバージョンがありますか?

直交エッジルーティングは、2010年9月28日以降のGraphvizバージョンでのみ使用できるため、お願いします。すべてのシステムに最新バージョンがパックされているわけではありません。私のシステムでは download を使用して、手動でGraphvizをインストールし、2.26.3(2010年1月26日から)より新しいバージョンを入手しました。

実際のグラフに4つ以上のノードが含まれていると仮定すると、線に曲がりを持たせ、余分な(非表示の)ノードを追加したくない場合は、グラフのnodesep属性を試してみてください。以下のコードと画像を参照してください。

digraph G {

    graph [splines=ortho, nodesep=1]
    node [shape=record]

    A -> {B, C} -> D
}

enter image description here

37
Potherca