在graphviz上设置节点方向

pab*_*sso 5 dot graphviz neato

假设此代码使用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
}
Run Code Online (Sandbox Code Playgroud)

这给了我们这个图:

neato图

我需要的是放置一个节点X,始终固定在父节点以南的位置.即如果我把另一种关系A -- X,X应该总是放在南方A.而且我并不关心其他所有事情的结局.

我已经查看了pos属性,但它似乎不是解决方案,因为X它不是真正处于固定位置,而是处于相对于他的关系的位置.

此外tailportheadport,但他们只能从边缘会出来/定义,但真的不影响节点的方向.

更新

一个额外的图像,使事情更清晰:

x应该从他父母那里向南

我不需要neato,但我不希望图形看起来像UD或LR点树,我不希望它是线性排序的.circo,fdp,sfdp,twopi也没关系.

小智 4

neato 程序支持多种模式,其中一种可能可以满足您的需求。特别是,如果设置 mode=ipsep,则可以指定在布局期间遵循的点状约束。例如,我采用您的图表并使用图表属性

mode=ipsep
diredgeconstraints=true
levelsgap=0.5
Run Code Online (Sandbox Code Playgroud)

第一个打开 ipsep 模式,第二个告诉模型支持点中的有向边缘,最后一个指定分离的强度。然后我将边缘目录属性设置为无

edge[dir=none]
Run Code Online (Sandbox Code Playgroud)

并添加一条边 A -- X [dir=1]

dir=1 表示该边缘应引起方向约束。如果我然后运行neato,我会得到附加的图片。

内托布局

Graphviz 属性文档http://www.graphviz.org/content/attrs提供了有关这些属性的更多信息。