1

我正在使用 PerlGraphViz模块来创建依赖关系树图。假设我有两个类,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 类”也出现在图中,但其中没有节点。

换句话说,我正在尝试将节点动态分配给集群。有什么想法可以做到吗?谢谢!

4

1 回答 1

2

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

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

我建议你试着写

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,这似乎不正确。但是如果没有看到更多您的程序,特别是您的数据的性质和向图中添加节点的循环,我无法正确判断。

于 2012-11-19T03:39:37.943 回答