我是graphviz和DOT语言的新手。我试着用集群子图生成图形。然而,当我有集群时,每个集群都在脚本中精确地指定了节点位置,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无论如何都要绘制集群轮廓框和标签呢?在这方面的任何帮助都将非常感谢!
谢谢!
发布于 2012-10-03 07:25:07
点布局引擎不支持pos
属性。
若要渲染预定义了所有节点位置的图形,应使用带有-n
选项的neato
或fdp
。
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];
}
发布于 2017-07-26 18:40:22
您的代码在viz.js上的svg中呈现得很好。我能够看到集群周围的边界。
也许你使用的graphviz版本是旧的,升级应该可以解决这个问题。
https://stackoverflow.com/questions/12699222
复制相似问题