首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Graphviz状态机图中设置任意节点位置

在Graphviz状态机图中设置任意节点位置
EN

Stack Overflow用户
提问于 2015-11-30 13:14:40
回答 2查看 608关注 0票数 0

Grapviz通常根据固定的样式格式化图表。

我想设置这个图的节点位置:

使用此代码生成:

代码语言:javascript
复制
digraph finite_state_machine {
    # rankdir=LR;
    size="8,5"
    node [shape = doublecircle]; S E;
    node [shape = circle];
    S  -> S0   [ label = "0/-" ];
    S  -> S1   [ label = "1/-" ];

    S0 -> S1   [ label = "1/-" ];
    S1 -> S0   [ label = "0/-" ];

    S0 -> S00  [ label = "0/0" ];
    S1 -> S11  [ label = "1/1" ];

    S0 -> E  [ label = "$/-" ];
    S1 -> E  [ label = "$/-" ];

    S00 -> S00 [ label = "0/0" ];
    S11 -> S11 [ label = "1/1" ];

    S00 -> S1  [ label = "1/0" ];
    S11 -> S0  [ label = "0/1" ];

    S00 -> E [ label = "$/0" ];
    S11 -> E [ label = "$/1" ];


}

// http://www.graphviz.org/Gallery/directed/fsm.html
// dot -Tpng example_fsm.dot > example_fsm.png

像这样的人:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-30 20:20:21

rank = same是你的朋友。我还为更大的对称性增加了一些权重。

代码语言:javascript
复制
digraph finite_state_machine 
{
    size="8,5"
    { rank = same; S0  S1  }
    { rank = same; S00 S11 }

    node [shape = doublecircle]; 
    S; E;
    node [shape = circle];
    S0; S1; S00; S11;

    S  -> S0   [ label = "0/-" ];
    S  -> S1   [ label = "1/-" ];

    S0 -> S1   [ label = "1/-" ];
    S1 -> S0   [ label = "0/-" ];

    S0 -> S00  [ label = "0/0", weight = 8 ];
    S1 -> S11  [ label = "1/1", weight = 8 ];

    S0 -> E  [ label = "$/-" ];
    S1 -> E  [ label = "$/-" ];

    S00 -> S00 [ label = "0/0" ];
    S11 -> S11 [ label = "1/1" ];

    S00 -> S1  [ label = "1/0" ];
    S11 -> S0  [ label = "0/1" ];

    S00 -> E [ label = "$/0" ];
    S11 -> E [ label = "$/1" ];
}

收益率

票数 1
EN

Stack Overflow用户

发布于 2015-12-01 07:18:13

作为另一种解决方案,该解决方案使用constraintdir属性而不是weight

代码语言:javascript
复制
digraph finite_state_machine {
    size="8,5"
    node [shape = doublecircle]; S E;
    node [shape = circle];
    S  -> S0   [ label = "0/-" ];
    S  -> S1   [ label = "1/-" ];

    S0 -> S00  [ label = "0/0" ];
    S1 -> S11  [ label = "1/1" ];

    S00 -> E [ label = "$/0" ];
    S11 -> E [ label = "$/1" ];

    S0 -> E  [ label = "$/-" ];
    S1 -> E  [ label = "$/-" ];

    S1 -> S00  [ label = "1/0", dir=back ];
    S0 -> S11  [ label = "0/1", dir=back ];

    edge[constraint=false];
    S0 -> S1   [ label = "1/-" ];
    S1 -> S0   [ label = "0/-" ];

    S00 -> S00 [ label = "0/0" ];
    S11 -> S11 [ label = "1/1" ];
}

用GraphvizFiddle可视化结果

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33999522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档