【问题标题】:graphviz - How to arrange nodes in a cycle in a rectangular layout?graphviz - 如何在矩形布局中循环排列节点?
【发布时间】:2014-01-26 13:35:00
【问题描述】:

预脚本

...当我完成这些示例时,我看到了'roundtrip' flow topic,它看起来不错。 既然我已经把这个放在这里了,不妨问一下:还有其他选择吗?

原帖

在子图中有没有办法在矩形布局中自动布局节点?

例如,假设我有给定的结构:

digraph
{
    rankdir="LR";

    node [ shape="circle", style="bold, filled", fillcolor="#dddddd" ];

    a -> b -> c -> d -> e -> f -> g -> h -> b;
}

这产生了图表

我的目标是让它们排列成一个矩形,每行三个节点,形成

如果我尝试限制排名并更改rankdir,它不会像预期的那样(我假设因为你不能像这样更改rankdir):

digraph
{
    rankdir="LR";

    node [ shape="circle", style="bold, filled", fillcolor="#dddddd" ];

    a -> b -> c -> d -> e -> f -> g -> h -> b;

    subgraph
    {
        rankdir="TB";
        rank="same";
        c; d; e;
    }

    subgraph
    {
        rankdir="TB";
        rank="same";
        f; g; h;
    }
}

如果我手动完成并按照我的意愿分配排名,它会起作用:

digraph
{
    rankdir="LR";

    node [ shape="circle", style="bold, filled", fillcolor="#dddddd" ];

    a -> b -> c -> d -> e -> f -> g -> h -> b;

    { rank="same"; c; h; }
    { rank="same"; d; g; }
    { rank="same"; e; f; }
}

编辑

刚刚试了下方法,效果不错。我确实必须取消最右边的边缘以防止它形成不对称的形状,但总体而言就像一个魅力(而且更直观)!

digraph
{
    rankdir="LR";

    node [ shape="circle", style="bold, filled", fillcolor="#dddddd" ];

    a -> b -> c -> d -> e;
    e -> f [ constraint="false" ];
    b -> h -> g -> f [ dir="back" ];
}

【问题讨论】:

    标签: layout graphviz dot


    【解决方案1】:

    不确定该放在哪里,但我会继续将其发布在这里作为附带答案。

    我尝试了一个更大的循环:

    digraph
    {
        rankdir="LR";
    
        node [ shape="circle", style="bold, filled", fillcolor="#dddddd" ];
    
        x -> y;
        y -> aa [ constraint="false" ];
        aa -> ab -> ac -> ba;
    
        { rank="same"; ba -> bb -> bc -> ca; }
    
        da -> cc -> cb -> ca [ dir="back" ];
    
        { rank="same"; aa -> dc -> db -> da [ dir="back" ]; };
    
    }
    

    还尝试了蛇形图案:

    digraph
    {
        rankdir="LR";
    
        node [ shape="circle", style="bold, filled", fillcolor="#dddddd" ];
    
        x -> y;
        y -> aa [ constraint="false" ];
        aa -> ab -> ac;
        ac -> ba [ constraint="false" ];
        bc -> bb -> ba [ dir="back" ];
    
        bc -> ca [ constraint="false" ];
        ca -> cb -> cc;
    
        cc -> da [ constraint="false" ];
        dc -> db -> da [ dir="back" ];
    
        y -> dc [ dir="back", constraint="false" ];
    
        // { rank="same"; aa; bc; ca; dc; };
    }
    

    这个还是有点乱。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-23
      • 2016-02-06
      • 2018-03-01
      • 2011-05-13
      • 1970-01-01
      • 1970-01-01
      • 2021-02-25
      相关资源
      最近更新 更多