使用 graphviz 和 neato 防止记录重叠

问题描述 投票:0回答:3

我正在构建一个点文件来表示计算机硬件以及与网络交换机和显示器的物理连接。 当由点程序处理时,我看起来不错,但我想我真的希望由 neato 处理它,以便在它开始处理时创建一个更“自由形式”的图片。 现在,当我用 neato 运行我的大文件时,一切都是重叠的。

我正在尝试找出在哪里定义

overlap
属性的语法。 以下是我的点文件的子集。

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;  
}
graphviz dot neato
3个回答
54
投票

嗯,就像大多数问题一样......在我发布后不久我就找到了答案。我需要在文件顶部添加

graph [overlap=false];

这样做:

graph g {
    overlap = false;

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

5
投票

将重叠设置为 false 将适用于 neato,正如社区 wiki 答案所说;然而,如果图形表现出任何形式的规律性或对称性,

[overlap=false]
经常会通过抖动节点以使它们不重叠来弄乱它。

使用

[overlap=false]
作为最后的手段。

neato 输出的所有节点重叠都可以视为发生,因为节点相对于边缘太大。您可以通过减小节点来消除任何重叠,并通过设置

[overlap=scale]
来保持图形绘制中的对称性。引用Neato 用户手册

为了提高清晰度,消除重叠有时会有所帮助 节点或边。消除节点重叠的一种方法就是扩大规模 布局(就节点的中心点而言)尽可能多 需要。这是通过设置图形属性重叠=比例来启用的。 这种变换保留了整体几何关系 布局,但在糟糕的情况下可能需要高比例因子

正如文档所说,

[overlap=scale]
可能会导致图形绘制大得令人无法接受,但如果不是这样,它的输出通常会比
[overlap=false]
更好看。


0
投票

图 G { 布局=neato;重叠=假;节点[形状=矩形]; 0 [标签=“节点0”]; 1 [标签=“节点1”]; 2 [标签=“节点2”]; 3 [标签=“节点3”]; 4 [标签=“节点4”]; 5 [标签=“节点5”]; 6 [标签=“节点6”]; 7 [标签=“节点7”]; 8 [标签=“节点8”]; 9 [标签=“节点9”]; 0 -- 1; 1——2; 2 -- 3; 3 -- 4; 4 -- 5; 5 -- 6; 6 -- 7; 7——8; 8——9; 0 -- 4; 2——6; 3——8; 1——5; }

© www.soinside.com 2019 - 2024. All rights reserved.