使用Graphviz创建图表,限制表示的深度。

3
我有一个.dot文件,其中编码了一个具有许多层级的二叉决策树。为了可视化它,我使用命令dot -Tpng sample.dot > sample.png。但是生成的.png文件非常大,难以理解。因此,我想知道是否可以通过命令行限制在输出文件中呈现的层数,即我不想修改-dot文件,只想调节如何生成.png输出文件。我阅读了文档,但没有找到任何信息。
例如,如果我只想要前三个层级的决策树,是否有类似于dot -Tpng sample.dot > sample.png -L 3的修饰符?
1个回答

5
您不能使用 "dot" 仅显示图表的一部分,但是您可以使用 "gvpr" 对树进行编程编辑,然后使用 "dot" 显示已编辑的树。有关所有详细信息,请参见 "gvpr" 手册here

例如,给定文件 tree.dot

digraph G {
    n [level = 1]
    n -> nL
    nL [level = 2]
    nL -> nLL
    nLL [level = 3]
    nLL -> nLLL
    nLLL [level = 4]
    nLL -> nLLR
    nLLR [level = 4]
    nL -> nLR
    nLR [level = 3]
    nLR -> nLRL
    nLRL [level = 4]
    nLR -> nLRR
    nLRR [level = 4]
    n -> nR
    nR [level = 2]
    nR -> nRL
    nRL [level = 3]
    nRL -> nRLL
    nRLL [level = 4]
    nRL -> nRLR
    nRLR [level = 4]
    nR -> nRR
    nRR [level = 3]
    nRR -> nRRL
    nRRL [level = 4]
    nRR -> nRRR
    nRRR [level = 4]
}

...当使用dot绘制时,它看起来像这样:

enter image description here

...命令gvpr -i 'N [level < 4]' tree.dot | dot -Tpng -otree3.png会生成以下图片:

enter image description here

有更复杂的使用gvpr的方法,可以在不需要标记节点级别的情况下选择要查看的图形部分,但我对gvpr不够精通,无法确切地说明如何做到这一点,因为我现在没有足够的时间进行更多的研究。


非常好的答案!!非常感谢你!! - tashuhka
看起来只有在为每个节点显式签署“级别”时才能正常工作。如果我们无法控制输入数据,有没有办法做到这一点(减少图的深度)?此外,似乎我们更关心边而不是节点(根据图形,单个节点可能会出现在多个“级别”中)。 - larsks
1
@larsks -- 或许...根据gvpr手册,我们可以(比如说)只显示(或不显示)节点名称在给定列表中的节点。然而,正如你所观察到的那样,如果我们有一个看起来像A -> B -> C; A -> C或者E -> F -> E的图形,我们需要找到一种明确的方式来说明CE所在的层级,从而确定是否在缩减深度版本的图形中显示它。 - Simon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接