【问题标题】:How to prohibit nodes merge in graphviz?如何在graphviz中禁止节点合并?
【发布时间】:2018-03-23 12:09:39
【问题描述】:

我使用 graphviz 来绘制命令树。默认情况下,它合并具有相同名称的节点。如何禁止这种行为? 例子: 我有一个代码:

strict digraph 2 {
rankdir=LR;
SHOW_CONFIGURATION -> INTERFACES_eth;
SHOW_CONFIGURATION -> INTERFACES_vlan;
SHOW_CONFIGURATION -> INTERFACES_lag;
SHOW_CONFIGURATION -> INTERFACES_eth -> DESCRIPTION;
SHOW_CONFIGURATION -> INTERFACES_vlan -> DESCRIPTION;
SHOW_CONFIGURATION -> INTERFACES_lag -> DESCRIPTION;
SHOW_CONFIGURATION -> INTERFACES_eth -> IPV4;
SHOW_CONFIGURATION -> INTERFACES_vlan -> IPV4;
SHOW_CONFIGURATION -> INTERFACES_lag -> IPV4;
}

使用命令dot -Tsvg -o cli_tree.svg SHOW_CONFIGURATION.dot绘制的结果:

但我需要在不合并相同子命令节点的情况下绘制它,如下图所示:

.

请帮助我知道如何绘制这样的图表。

【问题讨论】:

    标签: graphviz graph-visualization


    【解决方案1】:

    默认情况下,graphviz 使用节点 id 作为标签。如果不同的节点需要具有相同的标签,则必须明确定义标签。

    我还发现首先定义所有节点,然后定义这些节点之间的边有时很有用。

    strict digraph 2 {
    rankdir=LR;
    //Nodes
    cfg [label="SHOW_CONFIGURATION"];
    eth [label="INTERFACES_eth"];
    vlan [label="INTERFACES_vlan"];
    lag [label="INTERFACES_lag"];
    node[label="DESCRIPTION"];
    d1;d2;d3;
    node[label="IPV4"];
    i1;i2;i3;
    
    // Edges
    cfg -> {eth; vlan; lag;}
    eth -> {d1; i1;}
    vlan -> {d2; i2;}
    lag -> {d3; i3}
    }
    

    在此示例中,指令node[...] 定义了该指令之后所有新节点的默认属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      相关资源
      最近更新 更多