5

neatoを使用してこのコードを想定します。

graph sample {
  layout=neato
  overlap=false
  splines=true
  tailclip=false
  headclip=false
  A -- I
  A -- J
  A -- B
  A -- H
  A -- E
  A -- K
  B -- D
  B -- C
  B -- L
  C -- M
  C -- N
  C -- O
  D -- P
  D -- Q
  E -- R
  F -- A
  G -- F
  H -- J
}

これにより、次の図が得られます。

ネイト図

私が必要としているのはX、常に親ノードの南の位置に固定されたノードを配置することです。つまり、別の関係を置く場合はA -- XX常に南に配置する必要がありますA。そして、私は他のすべてがどこで終わるかは本当に気にしません。

pos属性を調べましたがX、実際には固定された位置ではなく、彼の関係に関連する位置にあるため、解決策ではないようです。

また、、ただし、エッジが出入りする場所を定義するだけで、ノードの方向には実際には影響しませんtailportheadport

アップデート

物事をより明確にするための追加の画像:

xは彼の親から南にあるべきです

ネイトは必要ありませんが、グラフをUDまたはLRドットツリーのように見せたくありません。線形に並べたくありません。circo、fdp、sfdp、twopiも大丈夫です。

4

2 に答える 2

4

更新された制約に応じて、1つの解決策はAとXを固定し、それらの周りにグラフをレイアウトすることです。

graph sample {
overlap=false;
splines=true;
tailclip=false;
headclip=false;

A [pin=true,pos="0,.2"]
X [pin=true,pos="0,.1"]
A -- I
A -- J
A -- B
A -- H
A -- E
A -- K
B -- D
B -- C
B -- L
C -- M
C -- N
C -- O
D -- P
D -- Q
E -- R
F -- A
G -- F
H -- J
A -- X

グラフ出力

ネイトとfdpの両方でレイアウトしてみたところ、思い通りのグラフができたようです。当然、同じグラフ内のノードの任意のペアにこのような制約を課したい場合、このソリューションは機能しない可能性があります。

---以前の回答---

ネイトを使用することに専念している場合は、後処理ステップでグラフを変更せずに問題を解決する方法があるかどうかはわかりません。neatoが便利なデフォルトである場合は、代わりにドットをレイアウトエンジンとして使用し、「rankdir = UD」に加えて、Xを真南にする必要がある場合は、いくつかの追加の応急修理を使用することで、問題を解決できるはずです。

単一のノードXに適用するための制約のみが必要な場合は、XとAをクラスターにまとめると次のようになります。

graph sample {
  rankdir=UD 
  layout=dot
  overlap=false
  // .. as before
  A -- X
  subgraph clusterone {
   style=invisible
   A
   X
  }
}

Aの任意の子に適用するために厳密に南の制約が必要な場合は、その種のクラスタリングの後に、次の説明のトリックが続きます。

graphvizの同じ列にすべてのノードを強制するにはどうすればよいですか?

トリックを行う可能性があります。clusterrank=localその場合、属性も役立つかもしれませんが、よくわかりません。お役に立てれば。

于 2012-01-12T23:54:46.940 に答える
4

neatoプログラムは複数のモードをサポートしており、そのうちの1つで必要なものを提供できる可能性があります。特に、mode = ipsepを設定すると、レイアウト中に適用されるドットのような制約を指定できます。たとえば、私はあなたのグラフを取り、グラフ属性を使用します

mode=ipsep
diredgeconstraints=true
levelsgap=0.5

1つ目はipsepモードをオンにし、2つ目はドットのように有向エッジをサポートするようにモデルに指示し、最後は分離の強さを指定します。次に、edgedir属性をnoneに設定します

edge[dir=none]

エッジを追加しますA--X[dir= 1]

dir = 1は、このエッジが方向の制約を引き起こす必要があることを示します。その後、ネイトを実行すると、添付の画像が表示されます。

ネイトレイアウト

Graphviz属性のドキュメントhttp://www.graphviz.org/content/attrsには、これらの属性に関する詳細情報が記載されています。

于 2012-01-17T19:57:37.240 に答える