layout - graphviz - 如何以矩形布局循环排列节点?

标签 layout graphviz dot

预脚本

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

原帖

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

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

digraph
{
    rankdir="LR";

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

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

这产生了图表
test_1

我的目标是让它们排成一个矩形,由三个节点组成,形成

如果我尝试限制排名并更改 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;
    }
}

test_2

如果我手动完成并根据需要分配排名以排队,则它可以工作:
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; }
}

test_3

编辑

刚刚试了一下方法,效果不错。我确实必须取消对最右侧边缘的约束,以防止它形成不对称的形状,但总体而言,它就像一个魅力(而且更直观)!
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" ];
}

enter image description here

最佳答案

不知道把它放在哪里,但我会继续把它贴在这里作为辅助答案。

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

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" ]; };

}

enter image description here

还尝试了蛇形图案:
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; };
}

这个还是有点乱。

enter image description here

关于layout - graphviz - 如何以矩形布局循环排列节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21359943/

相关文章:

layout - AngularJS - 多种布局

tree - 如何让隐形节点在graphviz中占据空间?

Graphviz:如何使 HTML 表格单元格的样式变为粗体?

pandas - 使用 Graphviz 绘制决策树时出现“特征名称长度与特征数量不匹配”错误

点 (graphviz) 语言中节点标签中的换行符

winforms - 将控件定位在 CheckBox 的中间

html - CSS:并排,相同高度

graph - 如何使用 Dot 和 Graphviz 循环布局完整的图形?

textmate - TextMate 有 DOT 包吗?

java - 有没有办法在 HTML 中布局像 div 这样的 Swing 组件?