gpt4 book ai didi

Graphviz - 对齐节点和集群

转载 作者:行者123 更新时间:2023-12-04 12:25:55 27 4
gpt4 key购买 nike

我正在尝试用 Graphviz 绘制一个有限状态图,但我无法像我想要的那样得到它。这是我到目前为止所写的内容:

digraph G {
rankdir = LR;

subgraph cluster_op1 {

subgraph cluster_0 {
1 -> 2 [label="a"]
}

subgraph cluster_1 {
3 -> {4 6} [label="ε"]
4 -> 5 [label="b"]
5 -> 4 [label="ε"]
5 -> 6 [label="ε"]
}

subgraph cluster_2 {
7 -> {8 10} [label="ε"]
8 -> 9 [label="c"]
9 -> 8 [label="ε"]
9 -> 10 [label="ε"]
}

2 -> 3 [label="ε"]
6 -> 7 [label="ε"]
}

subgraph cluster_op2 {

subgraph cluster_3 {
11 -> {12 14} [label="ε"]
12 -> 13 [label="ab"]
13 -> 12 [label="ε"]
13 -> 14 [label="ε"]
}

subgraph cluster_4 {
15 -> 16 [label="c"]
}

14->15 [label="ε"]
}

0 -> {1 11} [label="ε"]
{10 16} -> 17 [label="ε"]
}

这是它的样子:
enter image description here

我想要的是:
  • cluster_op1内的所有节点水平对齐(与 cluster_op2 相同)
  • cluster_op2居中于 cluster_op1
  • 来自节点 0 的边至 cluster_op1cluster_op2长度相同(从这两个簇到节点 17 的边相同)
  • 最佳答案

    这不仅仅是一个真正的解决方案,但它为您提供了您想要的东西,至少对于这里介绍的案例。

    它使用三个元素:

    为了促进节点之间的直线,

    重量 如果组因一个节点指向其他两个节点而混淆,所有这些节点都在同一组中;并使集群在它们之间对齐,

    invis 边缘对齐 cluster_op2下面 cluster_op1 - 所以它不是居中而是手动调整。

    另外,我已经更换了b -> aa -> b[ dir = back ]在适用的情况下;我认为这是避免难以发现的错误的好习惯。

    所以这是您编辑的代码:

    digraph G {
    rankdir = LR;
    0, 1, 2, 15, 16, 17
    3, 4, 5, 6 [ group = 1 ];
    7, 8, 9, 10 [ group = 2 ];
    11, 12, 13, 14 [ group = 3 ];
    2 -> 11[ style = invis ];

    subgraph cluster_op1 {

    subgraph cluster_0 {
    1 -> 2 [ label="a" ];
    }

    subgraph cluster_1 {
    3 -> 4 [ label="ε", weight = 4 ];
    3 -> 6 [ label="ε" ];
    4 -> 5 [ label="b" ];
    4 -> 5 [ label="ε", dir = back];
    5 -> 6 [ label="ε", weight = 4 ];
    }

    subgraph cluster_2 {
    7 -> {8 10} [label="ε"]
    8 -> 9 [label="c"]
    8 -> 9 [ label="ε", dir = back ];
    9 -> 10 [label="ε"]
    }

    2 -> 3 [ label="ε", weight = 10 ;]
    6 -> 7 [ label="ε" ];
    }

    subgraph cluster_op2 {

    subgraph cluster_3 {
    11 -> 12 [ label="ε", weight = 4 ];
    11 -> 14 [ label="ε" ];
    12 -> 13 [ label="ab" ];
    12 -> 13 [ label="ε", dir = back ];
    13 -> 14 [ label="ε", weight = 4 ];
    }

    subgraph cluster_4 {
    15 -> 16 [label="c"]
    }

    14->15 [ label="ε", weight = 10 ];
    }

    0 -> {1 11} [label="ε"]
    {10 16} -> 17 [label="ε"]
    }

    这产生

    enter image description here

    关于Graphviz - 对齐节点和集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49348639/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com