无法在graphviz中打印集群子图的标签和大纲框

时间:2012-10-02 22:18:30

标签: graph graphviz dot graph-visualization

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

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

然后生成的图表是: Graph generated with clusters when nodes positions are not specified by the user

但是,使用以下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
}
}

生成的图表是: Graph generated with clusters when nodes positions are specified by the user

请注意,在这种情况下,既不会打印群集的大纲框,也不会打印群集的标签!在这种情况下,你可以看到两个集群之间有一个明确的界限 - 集群不重叠,所以原则上graphviz应该没有问题显示它们,我是对的吗?

无论如何,我如何告诉graphviz绘制群集大纲框和标签? 任何帮助都将非常感谢!!

谢谢!

2 个答案:

答案 0 :(得分:1)

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

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

neato不支持群集(尽管它是seems it should now)。幸运的是,fdp确实如此!

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

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

fdp -Tpdf -n -O filename.dot

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

我没有尝试使用最新版本(我使用的是2.29.20120504),但是如果最新版本都没有用,那么这可能是错误报告的一种情况。

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


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

fdp output


不使用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];
}

答案 1 :(得分:0)

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

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