2012-10-02 14 views
1

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

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绘制集群轮廓框和标签?无论如何? 任何帮助,将不胜感激!

谢谢!

+0

它正在为我工​​作。你使用的是什么版本的点?你使用什么命令进行转换? –

+0

我的网点版本:点 - graphviz版本2.28.0(20120313.1216)。我用于创建图形的命令:dot -Tpdf -O filename.dot –

+0

您确定它为您生成预期输出?如在中,是否按照预期的pos值排列节点?你能展示你得到的输出......这真的很有帮助!谢谢! – assassin

回答

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开关) - I加入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]; 
} 
+0

我尝试过使用fdp布局引擎,并且它提供了与点相同的输出。 当你在我的问题中运行第二段代码时,你是否也获得了与fdp相同的输出? – assassin

+0

我添加了输出到我的答案,相当大的调整。 – marapet

+0

是的,我终于得到了这个输出,但是,集群也被移动了,你也注意到了。我找不到解决这个问题的方法。 如果我只想要出现聚类标签,并且不太关心这些框,是否有某种方法可以在图表中的特定位置打印一些标签文本 - 即在群集的标题上,通常是由点或fdp? – assassin

0

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

也许你使用的graphviz版本是旧的,升级应该解决这个问题。