我是graphviz和DOT语言的新手。我正在尝试使用cluster 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绘制群集大纲框和标签? 任何帮助都将非常感谢!!
谢谢!
答案 0 :(得分:1)
点布局引擎不支持pos
属性。
要呈现预定义所有节点位置的图表,您应该使用neato
或fdp
-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
来限制图像大小:
不使用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版本可能很旧,升级应该可以解决问题。