如何强制子图形在Graphviz中的同一水平线上

时间:2015-11-25 11:05:58

标签: graphviz dot

我正在使用graphviz(点)来生成时间扩展图,以便在我的硕士论文中使用。但是,我的绘图结果如下图: Resulting Graph

正如你所看到的,第三行向右移动了一点。我希望所有的线都在同一条水平线上。此外,我希望每行中的x.th节点保持在行的其他第x个节点的相同水平线上。改变边缘权重对我没有帮助。

到目前为止,我找不到与此问题相关的任何内容。

我想要实现的是这样的: Example Graph

这是我的代码:

digraph G {
1[label="1"]
2[label="1"]
3[label="1"]
4[label="1"]
5[label="1"]
6[label="1"]
7[label="2"]
8[label="2"]
9[label="2"]
10[label="2"]
11[label="2"]
12[label="2"]
13[label="3"]
14[label="3"]
15[label="3"]
16[label="3"]
17[label="3"]
18[label="3"]
19[label="4"]
20[label="4"]
21[label="4"]
22[label="4"]
23[label="4"]
24[label="4"]

rankdir="LR";
node[width=0.15, height=0.15, shape=point];
edge[weight=500, label="1"];

1 -> 2 -> 3 -> 4 -> 5 -> 6 ;
7 -> 8 -> 9 -> 10 -> 11 -> 12 ;
13 -> 14 -> 15 -> 16 -> 17 -> 18 ;
19 -> 20 -> 21 -> 22 -> 23 -> 24 ;

edge[weight=3];
1 -> 9;
2 -> 9;
3 -> 11;

13 -> 22;
14 -> 22;
15 -> 24;

edge[weight=1];
1 -> 14;
2 -> 15;
3 -> 17;

7 -> 21;
8 -> 23;
9 -> 22;
}

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

不要使用weight尝试使用属性constraint=false来处理从“一行”到另一行的所有边缘。

constraint设置为false会使graphviz 而不是在布置图表的节点时考虑这些边缘。

另见very similar question & answer

答案 1 :(得分:0)

据我所知,唯一的方法是为每个单独的节点指定一个明确的位置。

请参阅:How to force node position (x and y) in graphviz