GraphViz is a suite of programs developed by AT&T to manipulate and generate pretty displays of graph theoretical structures. It consists of several command line utilities, some of which also have associated GUIs, which are driven by a C-like scripting language called dot. GraphViz can create graphs in many different formats, such as png, svg and postscript to name but a few. There is also a Java library incarnation of GraphViz, called Grappa, and a web-server implementation which goes by the name WebDot.

The most useful of the GraphViz utilities are dot, neato and twopi, for creating directed, undirected and circular graph layouts, respectively. Applications of dot include dependency and inheritance graphs for computer programs, such as those produced by the documentation utility doxygen. Another application is mapping the nodegel (small sections at least), such as in the following code which draws this write-up and all the softlinks which existed when it was created:

/* 
 * GraphViz.dot
 *
 * An example dot file for use on Just_Tom's GraphViz node
 *
 */
digraph myGraph { 

  // make the GraphViz node a red box
  gv [label="GraphViz", color=red, shape=box]

  // make the following nodes blue circles
  nodes [color=blue, shape=circle]

  sd [label="Six Degrees of Everything"]
  gt [label="graph theory"]
  ng [label="edev:\nmapping the nodegel"] // use two lines for this label

  // use dashed edges
  edge [style=dashed,color=black]

  gv -> sd // a directed edge (arrow) from gv to sd
  gv -> gt
  gv -> ng

} 

This could be drawn with any of dot, neato or twopi; the first of which would create a hierarchical layout with smooth splines between the nodes; the second of which would create a regular planar embedding; and the third of which would place gv in the center and the three target nodes each an equal distance away situated on a circle. Note that this is a very simple example and that the options and features are too numerous to list here.


It should be noted that since dot requires a clear hierarchy for optimal performance, and neato uses an iterative spring based model for layout, the use of GraphViz for mapping the nodegel will be tricky, and twopi's more limited layout system probably offers the most feasible approach with regard to computational time.

http://www.graphviz.org/ and http://www.research.att.com/sw/tools/graphviz/ have the goodies.