Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Prevent overlapping records using graphviz and neato

I am building a dot file to represent computer hardware and the physical connections to a network switch and displays. I have it looking ok when processed by the dot program but I think I really want it processed by neato to create a more "free form" picture as it starts to grom. Right now when I run my large file with neato, everything is overlapping.

I am trying to figure out the syntax on where to define the overlap attribute. Below is a subset of my dot file.

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;   } 
like image 952
Chris Williams Avatar asked Jun 24 '09 17:06

Chris Williams


2 Answers

Well, as with most questions...soon after I posted the I figured out the answer. I needed to add graph [overlap=false]; at the top of the file.

Do it like this:

graph g {     overlap = false;      node [shape=record,height=.1];     /* ... */ } 
like image 85
3 revs, 3 users 57% Avatar answered Sep 22 '22 19:09

3 revs, 3 users 57%


Setting overlap to false will work for neato as the community wiki answer says; however, if the graph exhibits any kind of regularity or symmetry, [overlap=false] will often mess it up by jiggling the nodes around to make them not overlap.

Use [overlap=false] as a last resort.

All node overlaps that are outputted from neato can be viewed as occurring because the nodes are too big relative to the edges. You can make any overlaps go away by making the nodes smaller and preserve symmetry in the graph drawing by setting [overlap=scale]. Quoting the Neato user manual:

To improve clarity, it is sometimes helpful to eliminate overlapping nodes or edges. One way to eliminate node overlaps is just to scale up the layout (in terms of the center points of the nodes) as much as needed. This is enabled by setting the graph attribute overlap=scale. This transformation preserves the overall geometric relationships in the layout, but in bad cases can require high scale factors

As the documentation says [overlap=scale] can result in graph drawings that are unacceptably large, but if it does not its output is generally going to be better looking than [overlap=false].

like image 23
jwezorek Avatar answered Sep 19 '22 19:09

jwezorek