Graphviz 如何在控制系统图中用圆点定位元件?

Graphviz 如何在控制系统图中用圆点定位元件?,graphviz,dot,Graphviz,Dot,我希望控制以下示例中某些元素的位置: digraph { graph [splines=ortho]; /* Node customization. */ node [shape=box]; join [shape=point]; set [label="set\npoint"]; /* Define node levels; driving elements on top, feed back

我希望控制以下示例中某些元素的位置:

digraph {
        graph [splines=ortho];

        /* Node customization. */
        node [shape=box];
        join [shape=point];
        set [label="set\npoint"];

        /* Define node levels; driving elements on top, feed back below. */
        { rank = min; set; PID; P1; P2; join; OUT;}
        { rank = max; M1;}

        /* Edges */
        set -> PID -> P1 -> P2;
        P2-> join [arrowhead=none];
        join -> {OUT; M1};
        PID -> M1 [dir=back];
}

  • 如果我向M1列添加更多元素,则边将连接到随机点(北侧/上侧)。我想让它们保持水平连接。这能做到吗
  • 如何增加PID/P1/P2之间的间距(边长)
  • 最好垂直对齐P1/M1。这能做到吗
  • 传统的控制系统图没有连接节点,一条边只是从另一条边出来。这可能吗?我删除了这个箭头
  • 也许有些问题是无关的,因为一个问题的正确定位将使其他问题自然发生

  • 通常,可以使用属性控制箭头进入节点的点。但是对于
    正交
    样条曲线,这很少起作用。正交样条曲线有自己的生命,可能会导致各种不同的问题,包括边标签消失。所以你的第一个问题没有明确的答案,每种情况都必须具体处理

  • 通过设置图形属性,可以增加所有节点之间的距离。但如果只需要增加特定节点之间的距离,可以使用一个技巧:添加一个标签,其中包含大量空格作为值

  • 你可以用看不见的边来完成它

  • 下面编辑的示例说明了第2点和第3点:

    digraph {
            graph [splines=ortho];
    
            /* Node customization. */
            node [shape=box];
            join [shape=point];
            set [label="set\npoint"];
    
            /* Define node levels; driving elements on top, feed back below. */
            { rank = min; set; PID; P1; P2; join; OUT;}
            { rank = max; M1;}
    
            /* Edges */
            set -> PID;
            P2-> join [arrowhead=none];
            join -> {OUT; M1}
            PID -> M1 [dir=back];
    
    
            PID -> P1 -> P2 [label="               "] /* #2 increase space between specific nodes */
            P1 -> M1 [style=invis] /* #3 align P1 an M1 */
    }
    
    结果:

  • 通常,可以使用属性控制箭头进入节点的点。但是对于
    正交
    样条曲线,这很少起作用。正交样条曲线有自己的生命,可能会导致各种不同的问题,包括边标签消失。所以你的第一个问题没有明确的答案,每种情况都必须具体处理

  • 通过设置图形属性,可以增加所有节点之间的距离。但如果只需要增加特定节点之间的距离,可以使用一个技巧:添加一个标签,其中包含大量空格作为值

  • 你可以用看不见的边来完成它

  • 下面编辑的示例说明了第2点和第3点:

    digraph {
            graph [splines=ortho];
    
            /* Node customization. */
            node [shape=box];
            join [shape=point];
            set [label="set\npoint"];
    
            /* Define node levels; driving elements on top, feed back below. */
            { rank = min; set; PID; P1; P2; join; OUT;}
            { rank = max; M1;}
    
            /* Edges */
            set -> PID;
            P2-> join [arrowhead=none];
            join -> {OUT; M1}
            PID -> M1 [dir=back];
    
    
            PID -> P1 -> P2 [label="               "] /* #2 increase space between specific nodes */
            P1 -> M1 [style=invis] /* #3 align P1 an M1 */
    }
    
    结果:

    。。。我想我可以使用不同的箭头(无)让“P2”加入节点。。。。我想我可以使用另一个箭头(无)让“P2”加入节点。