如何禁止节点在graphviz中合并? [英] How to prohibit nodes merge in graphviz?

查看:163
本文介绍了如何禁止节点在graphviz中合并?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I use graphviz to draw commands tree. By default it's merging nodes with same name. How to prohibit this? Example: I have a code:

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绘制的结果:

Result of drawing with command dot -Tsvg -o cli_tree.svg SHOW_CONFIGURATION.dot:

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

But i need to draw it without merging of same subcommand nodes, like in this image:

.

请帮助我了解如何绘制图形.

Please, help me to know how can i draw my graph like so.

推荐答案

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

By default, graphviz uses the node id as label. If distinct nodes need to have the same label, the label has to be defined explicitely.

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

I also find it sometimes useful to define first all nodes, then the edges between those nodes.

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[...]为该指令之后的所有新节点定义了默认属性.

In this example, the instruction node[...] defines default attributes for all new nodes after this instruction.

这篇关于如何禁止节点在graphviz中合并?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆