在graphviz上设置节点方向

在graphviz上设置节点方向,graphviz,dot,neato,Graphviz,Dot,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 --

假设此代码使用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
,始终固定在其父节点以南的位置。i、 e.如果我放置另一个关系
A--X
X
应始终位于
A
的南部。我真的不在乎其他事情的结局

我已经研究了
pos
属性,但它似乎不是解决方案,因为
X
实际上并不处于固定位置,而是处于相对于其关系的位置

另外还有
tailport
headport
,但它们只定义了边缘的出/入位置,但并不真正影响节点的方向

更新

让事情更清楚的附加图像:


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

为了响应更新的约束,一种解决方案是固定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

我尝试了neato和fdp的布局,它似乎生成了一个您想要的图形。当然,如果希望对同一个图中的任意对节点施加这样的约束,此解决方案可能不起作用

---早先的答复---

如果您致力于使用neato,我不确定是否有一种方法可以在不在后处理步骤中修改图形的情况下解决此问题。如果neato只是一个方便的默认值,那么您应该能够通过使用dot作为布局引擎来解决问题,并使用“rankdir=UD”,如果X需要正南,还可以使用两个额外的kludges

如果只需要约束来应用单个节点X,那么将X和a放在一个集群中就可以完成以下工作:

graph sample {
  rankdir=UD 
  layout=dot
  overlap=false
  // .. as before
  A -- X
  subgraph clusterone {
   style=invisible
   A
   X
  }
}
如果您需要将严格的南方约束应用于的任意子级,则这种类型的群集将遵循中描述的技巧:


也许能奏效。属性
clusterrank=local
在这种情况下也可能有用,但我不确定。希望这有帮助。

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

mode=ipsep
diredgeconstraints=true
levelsgap=0.5
第一个打开ipsep模式,第二个告诉模型支持点中的定向边, 最后一项规定了分离的强度。然后,我将edge dir属性设置为none

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

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


Graphviz属性文档提供了有关这些属性的更多信息。

neato本身不是一个需求,但我不希望图形看起来有序,这就是我使用neato而不是dot的原因。谢谢。根据你的方向,我最终得到的X节点和你的图完全一样。但当它指向南方时,它是一条对角线。我似乎不能完全向南走。这可能吗?这不是我想要的,但你不能得到比这更权威的答案。赏金就这么来了。