【发布时间】:2015-05-05 21:27:37
【问题描述】:
我试图让多个节点集群在 Graphviz 中均匀分布。
我认为这张图片最能说明我想要做什么:
从图中可以看出,第2层和第3层之间有额外的间距。2和3之间的间距应该与1和2之间的间距相同。
间距也需要缩放超过 3 层。当我尝试超过 3 层时,第 4 层的间距与第 3 层一样差。
这是我的图表文件:
digraph G {
nodesep=1.25;
splines=false;
node[width=1, shape=circle];
edge[style=invis];
subgraph cluster_1 {
label="Layer 1";
"1-1" -> "1-2" -> "1-3";
}
subgraph cluster_2 {
label="Layer 2";
"2-1" -> "2-2" -> "2-3";
}
subgraph cluster_3 {
label="Layer 3";
"3-1" -> "3-2" -> "3-3";
}
edge[style=solid, penwidth=1, constraint=false];
"1-1" -> "2-1";
"1-3" -> "2-1";
"1-1" -> "2-2";
"1-2" -> "2-2";
"1-2" -> "2-3";
"1-3" -> "2-3";
"2-1" -> "3-1";
"2-3" -> "3-1";
"2-1" -> "3-2";
"2-2" -> "3-2";
"2-2" -> "3-3";
"2-3" -> "3-3";
}
我怎样才能让我的间距对称?任何帮助将非常感激。谢谢。
更新: 我设法使间距均匀,但这不是一个完美的解决方案。
通过在图形上方放置一个带有不可见边的不可见节点并将其连接到每一层的顶部节点,这些层的空间均匀。但是,此节点会弄乱需要在所示图像上方添加的内容的间距。那么,有没有更好的方法来做到这一点?
【问题讨论】:
-
我认为您在布局引擎中发现了一个错误。额外的空间出现在带有样条线的边缘
"x-3" -> "y-1"将围绕节点"y-2"路由。 -
@stefan 没有容器,布局引擎没有理由假设相等的间距很重要(这并不是说它不应该被编程这样做)。将集群嵌套在另一个集群中会导致布局引擎将它们平均间隔开。请参阅下面我的答案中的代码。
-
@benrudgers:有或没有“容器”的(不存在)推理是相同的。相等的间距只是偶然的,外部集群中的大空白确实清楚地表明了确定内部图大小的问题。另请参阅下面我对您的回答的评论。