我正在使用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类”也出现在图表中,但其中没有节点。
换句话说,我正在尝试动态地将节点分配给群集。任何想法我怎么能做到这一点?谢谢!
答案 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,除非它的类与前一个节点的类不同,并且看起来不像对。但是,如果没有看到更多的程序,我就无法正确分辨,特别是数据的性质以及向图表添加节点的循环。