交换 GraphViz 图中两个节点的位置 (DOT)

Swap positions of two nodes in a GraphViz diagram (DOT)

我使用 DOT 语言在 R 中创建图表。当我得到一个奇怪的结果时,我很感兴趣如何交换两个节点的位置:节点 8 和节点 c4?

代码:

digraph DAG {
    # Initialization of node attributes
    node [shape = box, color = blue]; 2; 3; 4; 

    # Revision to node attributes
    { node [shape = box,style = filled,fillcolor = yellow];  8}

    # Revision to node attributes
    { node [shape = diamond, color = "red"];  c1; c2; c3; c4}

    { rank=same; c1; c2; c3}
    { rank=same; 8; c4}

    # Initialization of edge attributes
    edge [color = green, rel = yields]

    # Edge statements
    2->c1 [headport = w]; 
    c1->c2->c3 
    c2->c1 [tailport = n, headport = n];

    8->c3  [tailport = n, headport = s];
    c3->3  [tailport = e, headport = n]; 
    c3->c2 [tailport = n, headport = n];

    3->c4  [tailport = s, headport = n];
    c4->4  [tailport = s, headport = n];
    c4->8  [tailport = w, headport = e];
}

(不正确的)结果是:

对于 "wrong way" 个边缘你可以

  • 交换节点并使用属性 dir = back 反转其 'force'
  • 使用属性 constraint = none 禁用其 'force'

在你的情况下你替换

8->c4  [tailport = e, headport = w, dir = back];

通过

c4->8  [tailport = w, headport = e, constraint = none];

8->c4  [tailport = e, headport = w, dir = back];