simple dagreD3 example

by jpeter06

HTML

<script src="https://dagrejs.github.io/project/dagre/latest/dagre.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/dagre-d3/0.6.1/dagre-d3.min.js"></script>
<meta charset="utf-8">
<link rel="stylesheet" href="demo.css">
<script src="https://d3js.org/d3.v4.min.js" charset="utf-8"></script>
<script src="../dagre-d3.js"></script>

<style id="css">
.clusters rect {
  fill: #00ffd0;
  stroke: #999;
  stroke-width: 1.5px;
}

text {
  font-weight: 300;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serf;
  font-size: 14px;
}

.node rect {
  stroke: #999;
  fill: #fff;
  stroke-width: 1.5px;
}

.edgePath path {
  stroke: #333;
  stroke-width: 1.5px;
}
</style>

<svg id="svg-canvas" width=960 height=600></svg>

JavaScript

// Create the input graph
var g = new dagreD3.graphlib.Graph({compound:true})
  .setGraph({}).setDefaultEdgeLabel(function() { return {}; });

// Here we're setting the nodes
g.setNode('a', {label: 'A', rank: 0});
g.setNode('b', {label: 'B', rank: 1});
g.setNode('c', {label: 'C', rank: 1});
g.setNode('d', {label: 'D', rank: 1});
g.setNode('e', {label: 'E', rank: 0});
g.setNode('f', {label: 'F', rank: 1});
g.setNode('g', {label: 'G', rank: 1});

// Set up edges, no special attributes.
g.setEdge('a', 'b',{label:'AAA', labelClass:'BBB', labelName:'CCC'});
g.setEdge('a', 'c');
g.setEdge('c', 'd');
g.setEdge('d', 'f');
g.setEdge('d', 'g');
g.setEdge('e', 'g');

g.nodes().forEach(function(v) {
  var node = g.node(v);
  // Round the corners of the nodes
  node.rx = node.ry = 5;
});

// Create the renderer
var render = new dagreD3.render();

// Set up an SVG group so that we can translate the final graph.
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);

// Center the graph
var xCenterOffset = (svg.attr("width") - g.graph().width) / 2;
svgGroup.attr("transform", "translate(" + xCenterOffset + ", 20)");
svg.attr("height", g.graph().height + 40);