【问题标题】:GraphViz - alignment of subgraphGraphViz - 子图的对齐
【发布时间】:2017-04-25 00:40:02
【问题描述】:

我想画一个这样的图表。

但我唯一能画的图是:

我使用的代码:

graph [rankdir = LR]

node [shape=box]

x1;x2;x3;y1;y2;y3;y4;y5;y6;y7;y8;

node [shape=oval]

ind60;dem60;dem65

{x1,x2,x3} -> ind60[arrowhead=none arrowtail=normal dir=both]

{y1,y2,y3,y4} -> dem60[arrowhead=none arrowtail=normal dir=both]

dem65 -> {y5,y6,y7,y8}

ind60->dem60  dem60->dem65  ind60->dem65

我怎样才能画出想要的情节?

【问题讨论】:

    标签: graphviz diagram diagrammer


    【解决方案1】:

    使用rank=same不可见的边缘@987654322,迈出您想要实现的目标的第一步@

    digraph {
    
    node [shape=box]
    {
        rank=same;
        y1;y2;y3;y4;
    }
    
    dem60[shape=oval];
    {y1;y2;y3;y4} -> dem60 [dir=back];
    
    {
        rank=same;
        x2 [group=left];
        ind60[shape=oval];
        dem65[shape=oval];
        y6 [group=right];
    
        x2 -> ind60 [dir=back];
        ind60 -> dem65
        dem65 -> y6;
    }
    
    // Invisible edges to order vertically node groups
    edge[style=invis];
    x1[group=left];
    x3[group=left];
    x1 -> x2 -> x3;
    node[group=right];
    y5 -> y6 -> y7 -> y8;
    
    node[group=""]
    edge[style=solid]
    ind60->dem60
    dem60->dem65
    
    edge[constraint=false];
    ind60 -> x1;
    ind60 -> x3;
    dem65 -> y5;
    dem65 -> y7;
    dem65 -> y8;
    }
    
    • group 强制垂直对齐(同一组的)节点。
    • rank=same 使节点保持在同一等级。
    • 不可见的边缘在垂直组内强制排序。
    • constraint=false 删除了某些边的约束计算。
    • dir=back 反转显示的边缘方向。

    【讨论】:

    • 在这种情况下,“排名”的意义是什么。努力寻找有关这方面的好文档。
    • @Josiah Graphviz (dot) 确定每个节点的 rank,主要是通过查看边 - 没有传入边的节点排名最低,而有传入边的排名高于边另一端的节点。然后排名用于布局 - 从低(顶部)到高(底部)。 rank=same 修改了自动排名算法,并告诉 graphviz 对两个节点使用相同的排名,因此将它们显示在相同的垂直位置。
    • 谢谢!这很有帮助。
    猜你喜欢
    • 2015-07-22
    • 2021-08-22
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 2013-05-13
    相关资源
    最近更新 更多