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

无法在graphviz中打印群集子图的标签和大纲框,graph,graphviz,dot,graph-visualization,Graph,Graphviz,Dot,Graph Visualization,我是graphviz和DOT语言的新手。我试着用集群子gprah生成图。但是,当我有集群时,每个集群的节点位置都在脚本中精确指定,graphviz不会为集群生成轮廓框或标签! 具体来说,如果我有以下点脚本: digraph G{ subgraph cluster0{ label="Cluster 0" a->b } subgraph cluster1{ label="Cluster 1" c->d } } 然后生成的图形为: 但是,使用下面的点脚本,其中我精确地指定了4个节点的节

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

digraph G{
subgraph cluster0{
label="Cluster 0"
a->b
}
subgraph cluster1{
label="Cluster 1"
c->d
}
}
然后生成的图形为:

但是,使用下面的点脚本,其中我精确地指定了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绘制集群的轮廓框和标签? 在此方面的任何帮助都将不胜感激


谢谢

点布局引擎不支持
pos
属性

要渲染所有预定义节点位置的图形,应使用
neato
或带有
-n
选项的
fdp

neato
不支持集群(尽管它支持)。幸运的是,
fdp
做到了

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

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

不幸的是,节点相对于集群的位置是正常的,但是集群似乎仍然会被fdp移动(
-n
开关没有任何区别)

我没有尝试使用最新版本(我使用的是2.29.20120504),但如果最新版本也不起作用,这可能是一个bug报告的例子

顺便说一句,由于位置假定为英寸,这将创建一个非常大的图形


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

点布局引擎不支持
pos
属性

要渲染所有预定义节点位置的图形,应使用
neato
或带有
-n
选项的
fdp

neato
不支持集群(尽管它支持)。幸运的是,
fdp
做到了

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

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

不幸的是,节点相对于集群的位置是正常的,但是集群似乎仍然会被fdp移动(
-n
开关没有任何区别)

我没有尝试使用最新版本(我使用的是2.29.20120504),但如果最新版本也不起作用,这可能是一个bug报告的例子

顺便说一句,由于位置假定为英寸,这将创建一个非常大的图形


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

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


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

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


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

它对我有用。您使用的是什么版本的dot?您使用什么命令进行转换?我的dot版本:dot-graphviz版本2.28.0(20120313.1216)。我用于创建图形的命令:dot-Tpdf-O filename.dot您确定它为您生成了预期的输出吗?如中所示,在给定pos值的情况下,节点的排列是否符合预期?你能显示你得到的输出吗。。。那真的很有帮助!谢谢这是pdf文件:我使用的源代码与您的非工作案例完全相同。刚刚看到您的pdf。。。正如您所看到的,当您将我希望的节点的相对位置与pos值相结合时,这不是预期的输出。这正是我得到的输出,也与问题中第一个代码片段产生的输出相同(即,节点没有任何pos值),但我想要的是问题中的第二张图片,带有集群标题,等等。它对我有效。您使用的是什么版本的dot?您使用什么命令进行转换?我的dot版本:dot-graphviz版本2.28.0(20120313.1216)。我用于创建图形的命令:dot-Tpdf-O filename.dot您确定它为您生成了预期的输出吗?如中所示,在给定pos值的情况下,节点的排列是否符合预期?你能显示你得到的输出吗。。。那真的很有帮助!谢谢这是pdf文件:我使用的源代码与您的非工作案例完全相同。刚刚看到您的pdf。。。正如您所看到的,当您将我希望的节点的相对位置与pos值相结合时,这不是预期的输出。这正是我得到的输出,也与问题中第一个代码片段产生的输出相同(即,节点没有任何pos值),但我想要的是问题中的第二张图片,带有簇标题等。我使用fdp布局引擎进行了尝试,它给出了与dot相同的输出。当您运行我问题中的第二段代码时,fdp是否也会获得相同的输出?我将输出添加到我的答案中,大大调整了大小。是的,我最终获得了此输出,但是,正如您也注意到的那样,集群被移动了。我找不到任何办法来处理这件事。如果我只想显示簇标签,而不太关心框,是否有某种方法可以在图形中的特定位置打印一些标签文本-例如,在簇的标题处,通常通过点或fdp打印?我添加了一个解决方案,以实现使用不可见边而不是固定位置的布局。太好了,谢谢!雷亚