通过分支和层次结构确定在 JavaFX 中实现生命树可视化

问题描述 投票:0回答:1

我正在开发一个使用 JavaFX 可视化生命之树的项目,该项目基于 Kaggle 的数据集:生命之树数据集

该数据集将物种组织成分层树结构,包括各种生物分类,如域、界、门等,直至单个物种。我的目标是创建此层次结构的可视化表示,允许用户交互式地探索树。

到目前为止,我已经定义了三个模型来表示数据:

  1. TreeNode - 表示树中的单个节点(物种或分类级别)。
  2. TreeLink - 表示节点之间的链接,表示父子关系。
  3. TreeModel - 聚合节点和链接,管理整体结构。

我当前的挑战是为每个节点正确分配层次结构级别并识别“分支”,树中的重要分组不一定与域、王国等的固定级别完全对齐。由于数据集未明确标记,这变得复杂进化枝或提供明确的生物指标来确定它们。

这是我的 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";
        }
    }

我不确定如何:

  • 确定哪些节点应被视为进化枝。
  • 调整层次结构以考虑分支,确保节点 正确放置进化枝之前、内部和之后。
  • 总体而言,保持在 8 个层次类别内。

我非常感谢任何关于如何解决这个问题的建议,特别是任何识别进化枝并将其整合到层次结构中的策略。

提前感谢您的帮助!

algorithm recursion javafx tree
1个回答
0
投票

您的帖子提出了很多问题。我会尝试回答

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
的东西。我可能错过了一些。

我希望这有帮助。

完整代码.

© www.soinside.com 2019 - 2024. All rights reserved.