uml - Graphviz 从上到下和从左到右

标签 uml diagram graphviz

嗨,我想要一个带点语言的 uml 序列图,现在我有以下问题底部。我怎样才能做到这一点?

a   b   c   d
|   |   |   | 
|   |   |   |

也许我可以实现 a、b、c 和 d 及其所属边缘是集群,我为集群设置了不同的 rankdir?

编辑 刚刚通过在 a、b、c 和 d 之间添加不可见边找到了一个解决方案,但还有其他解决方案吗?

最佳答案

有志者,事竟成!

这是一个关于如何使用 dot 执行此操作的示例:

digraph SEQ_DIAGRAM {
    graph [overlap=true, splines=line, nodesep=1.0, ordering=out];
    edge [arrowhead=none];
    node [shape=none, width=0, height=0, label=""];

    {
        rank=same;
        node[shape=rectangle, height=0.7, width=2];
        api_a[label="API A"];
        api_b[label="API B"];
        api_c[label="API C"];
    }
    // Draw vertical lines
    {
        edge [style=dashed, weight=6];
        api_a -> a1 -> a2 -> a3;
        a3 -> a4 [penwidth=5, style=solid];
        a4 -> a5;
    }
    {
        edge [style=dashed, weight=6];
        api_b -> b1 -> b2 -> b3 -> b4;
        b4 -> b5 [penwidth=5; style=solid];
    }
    {
        edge [style=dashed, weight=6];
        api_c -> c1;
        c1-> c2 [penwidth=5, style=solid];
        c2 -> c3 -> c4 -> c5;
    }
    // Draws activations
    { rank=same; a1 -> b1 [label="activate()"]; b1 -> c1 [arrowhead=normal]; }
    { rank=same; a2 -> b2 [style=invis]; b2 -> c2 [label="refund()", arrowhead=normal, dir=back]; }
    { rank=same; a3 -> b3 [arrowhead=normal, dir=back, label="place_order()"]; b3 -> c3; }
    { rank=same; a4 -> b4 [label="distribute()", arrowhead=normal]; }
    { rank=same; a5 -> b5 [style=invis]; b5 -> c5 [label="bill_order()", arrowhead=normal]; }
}

渲染后,这将产生以下图像:

Sequence Diagram

关于这是如何实现的,有一些重要的提示:
  • 每个组件都有一个没有形状、没有高度和宽度的节点列表。
  • 每条线必须处于同一等级,否则 DOT 将根据其自动排名对其进行定位。
  • 为了把事情弄直,所有的方向都是一样的:从a到b到c。如果你颠倒其中的一些,DOT 会弄得一团糟。在箭头上实现正确方向的技巧是使用 dir edge 属性。
  • 边缘的权重属性对于保持垂直线直线非常重要。他们的人数必须超过最大级别的人数。如果您需要创建一个等级高达 100 的图表,您的体重必须至少为 101,否则将不可能有一条直线虚线。
  • 为了获得一条直线水平线,您必须连接相同等级的每个节点。否则,DOT 会弯曲线。例如,通过将 a1 连接到 b1 和 b1 连接到 c1 来实现连接 a1 到 c1。
  • 关于uml - Graphviz 从上到下和从左到右,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1491322/

    相关文章:

    algorithm - 如何绘制精确召回图?

    html - GraphViz HTML 嵌套表格

    graph - Graphviz 是此类图的最佳工具吗?

    ruby-on-rails - 基本 Rails 类的 UML 图

    installation - 建模安装逻辑/流程的最佳方法

    c# - 制作井字游戏的领域模型

    uml - 登录模块的用例图

    drawing - 草图绘图工具-软件设计图(uml)

    javascript - JavaScript 中的桑基图

    graphviz - graphviz中的简单线性排列