A couple years ago I put together a simple NLP parse tree visualizer demo which used d3 and the dagre layout library. At the time, integrating dagre with d3 required a bit of manual work (or copy-paste); however, since then dagre-d3 library was split out of dagre which added an easy API for adding and removing nodes. Even though the library isn’t under active development, I think it’s still the most powerful pure-JS directed graph layout library out there.
An example from the wiki shows how simple the the dagre-d3 API is for creating directed graphs, abbreviated here:
// Create the input graph var g = new dagreD3.graphlib.Graph() .setGraph({}) .setDefaultEdgeLabel(function() { return {}; }); // Here we"re setting nodeclass, which is used by our custom drawNodes function // below. g.setNode(0, { label: "TOP", class: "type-TOP" }); // ... snip // Set up edges, no special attributes. g.setEdge(3, 4); // ... snip // Create the renderer var render = new dagreD3.render(); var svg = d3.select("svg"), svgGroup = svg.append("g"); // Run the renderer. This is what draws the final graph. render(d3.select("svg g"), g);
Since that original demo site still gets a fair amount of traffic, I thought it would be good to update it to use dagre-d3 instead of the original hand-rolled bindings (along with other cleanup). You can see the change set required here.
The other goal was to re-familiarize myself with d3 and dagre, since I have a couple projects in mind which would make heavy use of both. Hopefully I’ll have something to post here in the next couple months.