1

我是 graphviz 和 DOT 语言的新手。我正在尝试使用集群 subgprahs 生成图表。但是,当我有集群时,每个集群都在脚本中精确指定了节点位置,graphviz 不会生成集群的轮廓框或标签!具体来说,如果我有以下 DOT 脚本:

digraph G{
subgraph cluster0{
label="Cluster 0"
a->b
}
subgraph cluster1{
label="Cluster 1"
c->d
}
}

那么生成的图是: 当用户未指定节点位置时使用集群生成的图形

但是,使用以下 DOT 脚本,我在其中准确指定了 4 个节点的节点位置:

digraph G{
subgraph cluster0{
label = "Cluster 0"
a[pos="10,200"]
b[pos="100,200"]
a->b
}
subgraph cluster1{
label = "Cluster 1"
c[pos="10,100"]
d[pos="100,100"]
c->d
}
}

生成的图形是: 当用户指定节点位置时使用集群生成的图形

请注意,在这种情况下,集群的轮廓框和集群的标签都不会打印!在这种情况下,如您所见,两个集群之间有明确的分界线 - 集群不重叠,所以原则上 graphviz 显示它们应该没有问题,对吗?

无论如何,我如何告诉 graphviz 绘制集群轮廓框和标签?对此的任何帮助将不胜感激!

谢谢!

4

2 回答 2

1

点布局引擎不支持该pos属性。

要呈现预定义所有节点位置的图形,您应该使用orneato选项。fdp-n

neato不支持集群(尽管现在看来应该如此)。幸运的是,fdp有!

因此,您可以使用以下命令:

dot -Tpdf -Kpdf -n -O filename.dot

或者

fdp -Tpdf -n -O filename.dot

不幸的是,节点相对于集群的位置还可以,但集群似乎仍然被 fdp 移动(-nswitch 没有任何区别)。

我没有尝试使用最新版本(我使用的是 2.29.20120504),但如果最新版本也不起作用,这可能是一个错误报告的情况。

顺便说一句,由于假设位置以英寸为单位,这将创建一个非常大的图表。


我使用 fdp 获得的输出(带或不带-n开关) - 我添加size=20以限制图像大小:

fdp 输出


不使用的替代解决方案pos

digraph G{
subgraph cluster0{
label = "Cluster 0"
{rank=same; a->b;}
}
subgraph cluster1{
label = "Cluster 1"
{rank=same; c->d; }
}

a -> c [style=invis];
}
于 2012-10-02T23:25:07.097 回答
0

您的代码在viz.js上的 svg 中呈现良好。我能够看到集群周围的边界。

也许您使用的 graphviz 版本很旧,升级应该可以解决这个问题。

于 2017-07-26T10:40:22.000 回答