使用graphviz和neato防止重叠记录

时间:2009-06-24 17:31:00

标签: graphviz dot neato

我正在构建一个点文件来表示计算机硬件以及与网络交换机和显示器的物理连接。我通过点程序处理它看起来不错,但我认为我真的希望它由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;  
}

2 个答案:

答案 0 :(得分:41)

  

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

这样做:

graph g {
    overlap = false;

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

答案 1 :(得分:0)

将重叠设置为false可以使neato正常工作,正如社区Wiki答案所述;但是,如果图表现出某种规律性或对称性,[overlap=false]经常会通过晃动周围的节点使它们不重叠来弄乱它。

使用[overlap=false]作为最后的手段。从neato输出的所有节点重叠都可以视为已发生,因为节点相对于边缘太大。您可以通过减小节点的大小来消除任何重叠,并通过设置[overlap=scale]来保持图形中的对称性。引用the Neato user manual

为提高清晰度,有时有助于消除重叠 节点或边。消除节点重叠的一种方法就是扩大规模 布局(以节点的中心点为单位) 需要。通过设置图形属性overlay = scale,可以启用此功能。 这种转换保留了整体几何关系 布局,但在坏情况下可能需要高比例系数

正如文档所述,[overlap=false]可能会导致图形绘制过大,但是如果不这样做,其输出通常会比[overlap=false]更好。