[76] | 1 | var w = 960, |
---|
| 2 | h = 500, |
---|
| 3 | fill = d3.scale.ordinal().range(colorbrewer.Greys[9].slice(1, 4)), |
---|
| 4 | stroke = d3.scale.linear().domain([0, 1e4]).range(["brown", "steelblue"]); |
---|
| 5 | |
---|
| 6 | var treemap = d3.layout.treemap() |
---|
| 7 | .size([w, h]) |
---|
| 8 | .value(function(d) { return d.size; }); |
---|
| 9 | |
---|
| 10 | var bundle = d3.layout.bundle(); |
---|
| 11 | |
---|
| 12 | var div = d3.select("#chart").append("div") |
---|
| 13 | .style("position", "relative") |
---|
| 14 | .style("width", w + "px") |
---|
| 15 | .style("height", h + "px"); |
---|
| 16 | |
---|
| 17 | var line = d3.svg.line() |
---|
| 18 | .interpolate("bundle") |
---|
| 19 | .tension(.85) |
---|
| 20 | .x(function(d) { return d.x + d.dx / 2; }) |
---|
| 21 | .y(function(d) { return d.y + d.dy / 2; }); |
---|
| 22 | |
---|
| 23 | d3.json("../data/flare-imports.json", function(classes) { |
---|
| 24 | var nodes = treemap.nodes(packages.root(classes)), |
---|
| 25 | links = packages.imports(nodes); |
---|
| 26 | |
---|
| 27 | div.selectAll("div") |
---|
| 28 | .data(nodes) |
---|
| 29 | .enter().append("div") |
---|
| 30 | .attr("class", "cell") |
---|
| 31 | .style("background", function(d) { return d.children ? fill(d.key) : null; }) |
---|
| 32 | .call(cell) |
---|
| 33 | .text(function(d) { return d.children ? null : d.key; }); |
---|
| 34 | |
---|
| 35 | div.append("svg:svg") |
---|
| 36 | .attr("width", w) |
---|
| 37 | .attr("height", h) |
---|
| 38 | .style("position", "absolute") |
---|
| 39 | .selectAll("path.link") |
---|
| 40 | .data(bundle(links)) |
---|
| 41 | .enter().append("svg:path") |
---|
| 42 | .style("stroke", function(d) { return stroke(d[0].value); }) |
---|
| 43 | .attr("class", "link") |
---|
| 44 | .attr("d", line); |
---|
| 45 | }); |
---|
| 46 | |
---|
| 47 | function cell() { |
---|
| 48 | this |
---|
| 49 | .style("left", function(d) { return d.x + "px"; }) |
---|
| 50 | .style("top", function(d) { return d.y + "px"; }) |
---|
| 51 | .style("width", function(d) { return d.dx - 1 + "px"; }) |
---|
| 52 | .style("height", function(d) { return d.dy - 1 + "px"; }); |
---|
| 53 | } |
---|