小编ink*_*994的帖子

具有分层布局的有向无环图

我正在尝试以编程方式构建家谱。我不在乎输入数据的格式,因为文本很容易解析(我是 NLP 研究人员),但是我在弄清楚如何构建(显示)树时遇到了麻烦。以下是我的问题:

  1. 家谱不是树。树是一种结构,其中每个子节点都只有一个父节点。家谱实际上是有向无环图 (DAG)。
  2. 有许多库可以生成 DAG,但这些可视化不是静态的,而且它们通常看起来并不令人愉快。一些例子:

    • Kingraph通常会做我想要的,但它无法绘制看起来不断开和不干净的边缘。
    • 后代树看起来很神奇,但严格来说它是一棵树,而不是 DAG。我玩过把它变成 DAG,但我认为这是不可能的。
    • Graphviz可以完全满足我的要求,但我无法让它从父级到子级的中心绘制边缘(请参阅我之前的问题)。

总之,我需要一个框架来:

  1. 解析家谱数据,
  2. 从数据构建 DAG,
  3. 并生成具有分层布局的 DAG SVG,因此它在视觉上看起来像一棵树。

我知道我将无法找到可以完成所有三个任务的东西(我已经花了两周的时间进行搜索),但是我希望找到可以完成后者的东西,或者至少可以帮助开发一种算法来做到这一点。在这一点上,我不在乎是否需要学习一门全新的语言才能做到这一点。我要求很多,但是您可以发送给我的任何资源、图书馆或建议都会有很大帮助。

免责声明不是在寻找以下任何一项:

我只是在寻找进行分层布局的算法。谢谢!

algorithm tree data-visualization family-tree directed-acyclic-graphs

5
推荐指数
1
解决办法
930
查看次数

家谱的 Graphviz 点边缘端口

非常接近能够生成一个看起来并不糟糕的家谱,但我遇到了以下问题。

//file: tree.dot
digraph {
    edge [dir=none];
    node [
        fillcolor="black",fixedsize=true,shape=box,
        style="rounded,filled",width=2.0
    ];
    splines=ortho;
    // GEN -01
    {
        rank=same; rankdir=LR;
        "Grandfather" [regular=0];
        m0002 [
            label="",shape=diamond,regular=0,height=0.25,
            width=0.25,style="filled",
        ];
        "Grandmother" [regular=0];
        {
            rank=same; rankdir=LR;
            "Grandfather" -> m0002 -> "Grandmother";
        }
    }
    m0002 -> c0001;
    // GEN  00
    {
        rank=same; rankdir=LR;
        c0000 [
            label="",shape=circle, regular=0, height=0.05,
            width=0.05,style="filled"
        ];
        c0001 [
            label="",shape=circle, regular=0, height=0.05,
            width=0.05,style="filled"
        ];
        c0002 [
            label="",shape=circle, regular=0, height=0.05,
            width=0.05, style="filled"
        ];
        {
            rank=same; rankdir=LR;
            c0000 -> c0001 -> c0002;
        } …
Run Code Online (Sandbox Code Playgroud)

tree dot graphviz graph-visualization

4
推荐指数
1
解决办法
4745
查看次数