GraphViz - 将节点添加到现有集群

时间:2012-11-18 23:05:47

标签: perl graphviz

我正在使用Perl GraphViz模块来创建依赖关系树图。假设我有两个类,A类和B类。我希望A类中的所有节点都是一个集群,B类中的所有节点都是另一个集群。

在Perl中,我得到了每个节点的类,并按照以下方式执行:

if ($currentClass ne $lastClass) {
    $classCluster = {name => "class B"};
}
else {
    $classCluster = {name => "class A"};
}

$graph->add_node($currentNode, cluster => $classCluster);

然而,这似乎并没有产生预期的结果。它创建了一个图形,其中所有节点都正确绘制图形,但它们不是被分配到适当的集群,而是看起来好像它们不是任何集群的一部分。此外,“A类”和“B类”也出现在图表中,但其中没有节点。

换句话说,我正在尝试动态地将节点分配给群集。任何想法我怎么能做到这一点?谢谢!

1 个答案:

答案 0 :(得分:2)

我不知道GraphViz模块,但我怀疑问题是你创建了多个匿名哈希来定义相同的群集。

每次Perl执行{name => "class B"}时,它都会创建一个 new 哈希,因此您为每个恰好具有相同名称的节点创建一个新群集。

我建议你尝试写作

my $clusterA = { name => 'Class A' };
my $clusterB = { name => 'Class B' };

在主循环之外,然后用

替换你显示的代码
if ($currentClass ne $lastClass) {
    $cluster = $clusterB;
}
else {
    $cluster = $clusterA;
}

$graph->add_node($currentNode, cluster => $cluster);

你应该得到更好的结果。

我担心你在群集A和群集B之间选择的方式。你拥有它的方式,一切都将进入群集A,除非它的类与前一个节点的类不同,并且看起来不像对。但是,如果没有看到更多的程序,我就无法正确分辨,特别是数据的性质以及向图表添加节点的循环。