我正在开发一个使用 JavaFX 可视化生命之树的项目,该项目基于 Kaggle 的数据集:生命之树数据集。
该数据集将物种组织成分层树结构,包括各种生物分类,如域、界、门等,直至单个物种。我的目标是创建此层次结构的可视化表示,允许用户交互式地探索树。
到目前为止,我已经定义了三个模型来表示数据:
我当前的挑战是为每个节点正确分配层次结构级别并识别“分支”,树中的重要分组不一定与域、王国等的固定级别完全对齐。由于数据集未明确标记,这变得复杂进化枝或提供明确的生物指标来确定它们。
这是我的 TreeNode 类的简化版本:
public class TreeNode {
private String id;
private String name;
private List<TreeNode> children = new ArrayList<>();
private boolean isCluster; // A potential flag for clades?
// Additional fields and methods...
}
这是我尝试在控制器中分配级别的地方,但我坚持有效地合并分支:
private void assignLevel(TreeNode node, int level) {
if (node == null) return;
node.setLevel(level);
node.setHierarchyTag(getHierarchyTag(level));
// A poor attempt to define clusters
if (node.getChildren().size() > THRESHOLD || level == 0) {
node.setCluster(true);
}
// recursively assign level to children
for (TreeNode child : node.getChildren()) {
assignLevel(child, level + 1);
}
}
private String getHierarchyTag(int level) {
// just set the tag
switch (level) {
case 0: return "life";
case 1: return "domain";
case 2: return "kingdom";
case 3: return "phylum";
case 4: return "class";
case 5: return "order";
case 6: return "family";
case 7: return "genus";
case 8: return "species";
default: return "unknown";
}
}
我不确定如何:
我非常感谢任何关于如何解决这个问题的建议,特别是任何识别进化枝并将其整合到层次结构中的策略。
提前感谢您的帮助!
您的帖子提出了很多问题。我会尝试回答
Determine which nodes should be considered as clades
。我不确定这是否正确,但我查了Clade
的定义,它是a group of organisms believed to have evolved from a common ancestor, according to the principles of cladistics
。这让我相信具有相同 Parent
的节点是 Clade
。
我找到了this,并想用它来处理你的数据。我将数据减少到一个非常小的集合,因为如果不减少它会产生一个大网络。这是我第一次使用
VisFx
库。我的猜测是 none
代表 null
节点。当我减少数据集时,这些节点可能被删除了。
在图像中,我试图圈出任何我认为被视为
Clade
的东西。我可能错过了一些。
我希望这有帮助。
完整代码.