首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在GraphViz排名布局中强制从左到右的节点顺序?

如何在GraphViz排名布局中强制从左到右的节点顺序?
EN

Stack Overflow用户
提问于 2013-01-02 21:49:15
回答 1查看 19.9K关注 0票数 22

我正在用GraphViz可视化一个流程集合。每个进程都由一些按程序顺序的读或写操作组成。当然,对于每个过程,希望以从左到右的顺序排列操作。

使用GraphViz (版本2.28),我的代码是这样的:

代码语言:javascript
运行
复制
digraph G 
{
ranksep = 1.0; size = "10,10";
{ 
    node [shape = plaintext, fontsize = 20];
    0 -> 1 -> 2 -> 3 -> 4;
}
node [shape = box];
{rank = same;0;wy1;rf1;rc1;rz1;ry1;ra1;rb1;rx2;}
{rank = same;1;wf1;}
{rank = same;2;wx2;wc1;}
{rank = same;3;wf2;wz2;wx3;wa1;}
{rank = same;4;wz1;wy2;wx5;wb1;}
wy1 -> rf1;
rf1 -> rc1;
rc1 -> rz1;
rz1 -> ry1;
ry1 -> ra1;
ra1 -> rb1;
rb1 -> rx2;
wx2 -> wc1;
wf2 -> wz2;
wz2 -> wx3;
wx3 -> wa1;
wz1 -> wy2;
wy2 -> wx5;
wx5 -> wb1;
wf1 -> rf1[color = blue];
wc1 -> rc1[color = blue];
wz1 -> rz1[color = blue];
wy1 -> ry1[color = blue];
wa1 -> ra1[color = blue];
wb1 -> rb1[color = blue];
wx2 -> rx2[color = blue];

// W'WR Order:
wx3 -> wx2[style = dashed, color = red];

// W'WR Order:
wx5 -> wx2[style = dashed, color = red];
}

我很抱歉地说,我不被允许以太低的声誉发布输出图片。如果你可以运行代码,你会发现结果并不是很令人满意,因为在pid = 3的进程中出现了乱序。具体来说,GraphViz layout algorithm已经将(理想)顺序"wf2-> wz2 -> wa1 -> wx3“重新安排为"wx3,wf2,wz2,wa1”。因此,我的问题是:

My Problem:如何在排名环境中强制从左到右的节点顺序?

通过浏览这个网站,我发现了一些类似的问题和潜在的解决方案。然而,它们在我的特定示例中并不起作用:

在等级分配期间,边的头部节点被约束为比尾节点处于更高的等级。但是,如果边具有constraint=false,则不会强制执行此要求。

基于上面的陈述,(我猜) constraint = false选项在不同的等级之间生效,而不是在同一等级中生效。

令人惊讶的是,

谢谢你的建议。可执行代码将非常受欢迎。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-17 23:30:16

代码语言:javascript
运行
复制
    digraph G 
{
ranksep = 1.0; size = "10,10";
{ 
    node [shape = plaintext, fontsize = 20];
    0 -> 1 -> 2 -> 3 -> 4;
}
node [shape = box];
{
rank = same;
0->wy1->rf1->rc1->rz1->ry1->ra1->rb1->rx2 [color=white];
rankdir=LR;
}
{
rank = same;
1->wf1[color=white];
rankdir=LR
}
{
rank = same;
2->wx2->wc1[color=white];
rankdir=LR;
}
{
rank = same;
3->wf2->wz2->wx3->wa1[color=white];
rankdir=LR;
}
{
rank = same;
4->wz1->wy2->wx5->wb1[color=white];
rankdir=LR;
}
wy1 -> rf1;
rf1 -> rc1;
rc1 -> rz1;
rz1 -> ry1;
ry1 -> ra1;
ra1 -> rb1;
rb1 -> rx2;
wx2 -> wc1;
wf2 -> wz2;
wz2 -> wx3;
wx3 -> wa1;
wz1 -> wy2;
wy2 -> wx5;
wx5 -> wb1;
wf1 -> rf1[color = blue];
wc1 -> rc1[color = blue];
wz1 -> rz1[color = blue];
wy1 -> ry1[color = blue];
wa1 -> ra1[color = blue];
wb1 -> rb1[color = blue];
wx2 -> rx2[color = blue];

// W'WR Order:
wx3 -> wx2[style = dashed, color = red];

// W'WR Order:
wx5 -> wx2[style = dashed, color = red];
}

我不太确定我是否正确理解了你的问题,但如果这是你想要的,请尝试使用它并发表评论。我添加了不可见的边来对节点进行正确的排序,并使用rankdir来使用左右布局。

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

https://stackoverflow.com/questions/14123259

复制
相关文章

相似问题

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