block by dhoboy 2f6ec590e3efca4c65d3

Gately Radial Tree

Full Screen

Re-working Gately Tree as a Radial Tree. I like this data better as a tree, rather than a radial tree. The radial needed to be spaced out so much to accommodate long labels. Adapted Gately Tree to radial according to this Mike Bostock Block.

index.html

<!DOCTYPE html>
<meta charset="utf-8">
<style>

.node circle {
  fill: #fff;
  stroke: steelblue;
  stroke-width: 1.5px;
}

.node {
  font: 10px sans-serif;
}

.link {
  fill: none;
  stroke: #ccc;
  stroke-width: 1.5px;
}

</style>
<body>
<script src="//d3js.org/d3.v3.js"></script>
<script>

var diameter = 1100,
    padding = {top: 250, side: 400};

var tree = d3.layout.tree()
	.size([360, diameter / 2])
	.separation(function(a, b) { return (a.parent == b.parent ? 1 : 2) / a.depth; });

var diagonal = d3.svg.diagonal.radial()
	.projection(function(d) { return [d.y, d.x / 180 * Math.PI]; });

var svg = d3.select("body").append("svg")
	.attr("width", diameter + padding.side)
	.attr("height", diameter + padding.top)
  .append("g")
	.attr("transform", "translate(700, 500)");  

d3.json("/d/914d024adf10bface11a/gately.json", function(error, data) {
  var nodes = tree.nodes(data),
  	  links = tree.links(nodes);
  	  
  var link = svg.selectAll("path.link")
  	  .data(links)
  	.enter()
  	  .append("path")
  	  .attr("class", "link")
  	  .attr("d", diagonal);
  
  var nodes = svg.selectAll("g.node")
      .data(nodes);

  // enter
  nodes.enter()
      .append("g")
      .attr("class", "node")
      .attr("transform", function(d){ return "rotate(" + (d.x - 90) + ")translate(" + d.y + ")"; })
    
  // update  
  nodes.append("circle")
  	.attr("r", 4.5);
  
  nodes.append("text")
  	.attr("dy", ".31em")
  	.attr("text-anchor", function(d) { return d.x < 180 ? "start" : "end"; })
	.attr("transform", function(d) { return d.x < 180 ? "translate(8)" : "rotate(180)translate(-8)"; })
  	.text(function(d) { return d.name; });

});
	
d3.select(self.frameElement).style("height", (diameter + padding.top) + "px").style("width", (diameter + padding.side) + "px");	

</script>