使用Graphviz和Neato防止重叠记录

44

我正在构建一个dot文件来表示计算机硬件和与网络交换机和显示器的物理连接。当通过dot程序处理时,我认为它看起来还可以,但是我想用neato处理它,以创建更加自由形式的图片随着它的增长而变得更好看。目前,当我使用neato运行我的大文件时,所有东西都重叠在一起。

我正在尝试找出在哪里定义overlap属性的语法。下面是我dot文件的子集。

graph g {  
    node [shape=record,height=.1];  
    PC8[label="{{<GigE1>GigE1|<GigE2>GigE2}|{<name>PC8}|{<dvi1>dvi1|<dvi2>dvi2|<dvi3>dvi3|<dvi4>dvi4}}"];  
    PC9[label="{{<GigE1>GigE1|<GigE2>GigE2}|{<name>PC9}|{<dvi1>dvi1|<dvi2>dvi2|<dvi3>dvi3|<dvi4>dvi4}}"];
    C1[label = "{{<dvi1>dvi1}|{<name>C1}}"];  
    C2[label = "{{<dvi1>dvi1}|{<name>C2}}"];  
    C3[label = "{{<dvi1>dvi1}|{<name>C3}}"];  
    C4[label = "{{<dvi1>dvi1}|{<name>C4}}"];  
    D1[label = "{{<dvi1>dvi1}|{<name>D1}}"];  
    D2[label = "{{<dvi1>dvi1}|{<name>D2}}"];  
    "PC8":dvi1 -- "C1":dvi1;  
    "PC8":dvi2 -- "C2":dvi1;  
    "PC8":dvi3 -- "C3":dvi1;  
    "PC8":dvi4 -- "C4":dvi1;  
    "PC9":dvi1 -- "D1":dvi1;  
    "PC9":dvi2 -- "D2":dvi1;  
}

7
好的,就像大多数问题一样,我发布后不久就找到了答案。我需要在文件顶部添加“graph [overlap=false];”即可。 - Chris Williams
4
你为何不把那个发表为答案呢?http://stackoverflow.com/questions/252194/how-to-earn-the-self-learner-badge - jjclarkson
2个回答

54

好的,就像大多数问题一样...我发布后不久就找到了答案。我需要在文件顶部添加graph [overlap=false];

按照以下方式执行:

graph g {
    overlap = false;

    node [shape=record,height=.1];
    /* ... */
}

1
实际上,您需要将其添加到最外层的图形定义中。也就是说,在文件的第一行之后,而不是作为第一行。 - wfaulk
2
我已将此设为社区维基,因为在编辑后没有保留我的原始答案文本! - Phil H
我认为在这种情况下应该提到splines=true。正如我在5.0.1版本中观察到的那样,overlap仅控制neato中节点的重叠,因此边仍然可以穿过节点。 - Wolf

3
将overlap设置为false可以对neato有效,正如社区Wiki答案所述; 然而,如果图表展现任何形式的规律或对称性,[overlap=false]通常会通过摆动节点来使它们不重叠而搞乱它。在必要时使用[overlap=false]。
从neato输出的所有节点重叠都可以视为节点相对于边缘太大所致。您可以通过减小节点大小并通过设置[overlap=scale]保留图形绘制中的对称性来消除任何重叠。引用Neato 用户手册

为了提高清晰度,有时消除重叠的节点或边缘是有帮助的。 消除节点重叠的一种方法就是根据需要放大布局(以节点的中心点为基础)。 这是通过设置图属性overlap = scale启用的。这种转换保持布局中的整体几何关系,但在严重情况下可能需要高比例因子。

根据文档,[overlap=scale] 可能会导致图形绘制过大,但如果没有这种情况,则其输出通常比 [overlap=false] 更美观。

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