如何使用graphviz在节点中存储的值绘制树?

如何使用graphviz在节点中存储的值绘制树?,graphviz,dot,Graphviz,Dot,我需要绘制如下所示的树(带有与某些节点关联的值): 但我发现只有这样才能画出下一棵树: 我尝试使用子图和嵌套子图,但不需要效果。目前,我使用下一个gv脚本: digraph "test-graph" { graph [rankdir=TB dpi=96] subgraph n0 { rank=same; "0_0" [ label = "a" ]; } subgraph n1 { rank=same;

我需要绘制如下所示的树(带有与某些节点关联的值):

但我发现只有这样才能画出下一棵树:

我尝试使用子图和嵌套子图,但不需要效果。目前,我使用下一个gv脚本:

digraph "test-graph" {
    graph [rankdir=TB dpi=96]
    subgraph n0 {
        rank=same;
        "0_0" [ label = "a" ];
    }
    subgraph n1 {
        rank=same;
        "1_0" [ label = "b" ];
        "1_1" [ label = "d" ];
        "1_2" [ label = "e" ];
        subgraph {
            "v3" [ label = "3", shape = "box" ];
            "1_1"->"v3" [ dir = none, constraint = false ];
            }
    }
    subgraph n2 {
        rank=same;
        "2_0" [ label = "g" ];
    }
    subgraph n3 {
        rank=same;
        "3_0" [ label = "a" ];
        "3_1" [ label = "b" ];
        "3_2" [ label = "c" ];
        subgraph {
            "v2" [ label = "2", shape = "box" ];
            "3_0"->"v2" [ dir = none, constraint = false ];
            "v0" [ label = "0", shape = "box" ];
            "3_1"->"v0" [ dir = none, constraint = false ];
            "v5" [ label = "5", shape = "box" ];
            "3_2"->"v5" [ dir = none, constraint = false ];
           }
    }
    subgraph n4 {
        rank=same;
        "4_0" [ label = "f" ];
        subgraph {
            "v1" [ label = "1", shape = "box" ];
            "4_0"->"v1" [ dir = none, constraint = false ];
            }
    }
    subgraph n5 {
        rank=same;
        "5_0" [ label = "c" ];
        subgraph {
            "v4" [ label = "4", shape = "box" ];
            "5_0"->"v4" [ dir = none, constraint = false ];
            }
    }
    "start"->"0_0";
    "0_0"->"1_0";
    "0_0"->"1_1";
    "0_0"->"1_2";
    "1_0"->"5_0";
    "1_1"->"2_0";
    "1_2"->"4_0";
    "2_0"->"3_0";
    "2_0"->"3_1";
    "2_0"->"3_2";

}
使用“cluster_”前缀可以解决一些问题(感谢Anne),但在点脚本中有重要的按顺序排列的节点及其值

毕竟我遇到了一个新问题——节点在图上的顺序不正确:a、b、c节点(节点“g”子节点)的顺序错误:

另外,是否有一种方法可以从节点中分辨右侧的点位置值?当然,最好的方法是将值放在节点下,但是,我如何找到,这是一个无法解决的问题

点脚本是:

digraph "test-graph" {
    graph [rankdir=TB dpi=96]
    subgraph cluster_n0 {
        rank=same;
        style=invis;
        "0_0" [ label = "a" ];
    }
    subgraph cluster_n1 {
        rank=same;
        style=invis;
        "1_0" [ label = "b" ];
        "1_1" [ label = "d" ];
            "v3" [ label = "3", shape = "box", width=.01, height=.01 ];
            "1_1"->"v3" [ dir = none, constraint = false ];
        "1_2" [ label = "e" ];
    }
    subgraph cluster_n2 {
        rank=same;
        style=invis;
        "2_0" [ label = "g" ];
    }
    subgraph cluster_n3 {
        rank=same;
        style=invis;
        "3_0" [ label = "a" ];
            "v2" [ label = "2", shape = "box", width=.01, height=.01 ];
            "3_0"->"v2" [ dir = none, constraint = false ];
        "3_1" [ label = "b" ];
            "v0" [ label = "0", shape = "box", width=.01, height=.01 ];
            "3_1"->"v0" [ dir = none, constraint = false ];
        "3_2" [ label = "c" ];
            "v5" [ label = "5", shape = "box", width=.01, height=.01 ];
            "3_2"->"v5" [ dir = none, constraint = false ];
    }
    subgraph cluster_n4 {
        rank=same;
        style=invis;
        "4_0" [ label = "f" ];
            "v1" [ label = "1", shape = "box", width=.01, height=.01 ];
            "4_0"->"v1" [ dir = none, constraint = false ];
    }
    subgraph cluster_n5 {
        rank=same;
        style=invis;
        "5_0" [ label = "c" ];
            "v4" [ label = "4", shape = "box", width=.01, height=.01 ];
            "5_0"->"v4" [ dir = none, constraint = false ];
    }
    "start"->"0_0";
    "0_0"->"1_0";
    "0_0"->"1_1";
    "0_0"->"1_2";
    "1_0"->"5_0";
    "1_1"->"2_0";
    "1_2"->"4_0";
    "2_0"->"3_0";
    "2_0"->"3_1";
    "2_0"->"3_2";

}

将不可见边从长方体添加到下一级节点,如以下示例所示

digraph "test-graph" {
    graph [rankdir=TB,dpi=96,splines=false]
    "1_1" [ label = "d" ];
    "v3" [ label = "3", shape = "box", width = 0, height = 0];
    "2_0" [ label = "g" ];

    "1_1"->"v3" [ dir = none];
    v3->"2_0"[style=invisible,dir = none];
    "1_1"->"2_0";
}
要将“值”节点与节点分组,必须使用名称以
cluster\uu
开头的子图。例如:

subgraph cluster_n4_0 {
  rank=same;
  "4_0" [ label = "f" ];
  "v1" [ label = "1", shape = "box" ];
  "4_0"->"v1" [ dir = none];
}
要使值具有较小的节点,可以使用
width
height
属性


我认为这里不需要几个级别的子图,对节点对使用集群应该很有用。

集群工作正常,谢谢。现在我只需要删除集群节点周围的边框使用以下命令:子图[style=“invi”];