var w = 960, h = 500, color = d3.scale.category20c(); var x = d3.scale.linear().range([0, w]), y = d3.scale.linear().range([0, h]); var treemap = d3.layout.treemap() .size([w + 1, h + 1]) .children(function(d) { return isNaN(d.value) ? d3.entries(d.value) : null; }) .value(function(d) { return d.value; }) .sticky(true); var svg = d3.select("body").append("svg:svg") .style("width", w) .style("height", h) .append("svg:g") .attr("transform", "translate(-.5,-.5)"); d3.json("readme.json", function(json) { var cell = svg.data(d3.entries(json)).selectAll("g") .data(treemap) .enter().append("svg:g") .attr("class", "cell") .attr("transform", function(d) { return "translate(" + x(d.x) + "," + y(d.y) + ")"; }) .on("click",click); cell.append("svg:rect") .attr("width", function(d) { return x(d.dx); }) .attr("height", function(d) { return y(d.dy); }) .style("fill", function(d) { return d.children ? color(d.data.key) : null; }); cell.append("svg:text") .attr("x", function(d) { return x(d.dx) / 2; }) .attr("y", function(d) { return y(d.dy) / 2; }) .attr("dy", ".35em") .attr("text-anchor", "middle") .text(function(d) { return d.children ? null : d.data.key; }); function click(d) { x.domain([d.x, d.x + d.dx]); y.domain([d.y, 1]).range([d.y ? 20 : 0, h]); cell.transition() .duration(750) .attr("x", function(d) { return x(d.x); }) .attr("y", function(d) { return y(d.y); }) .attr("width", function(d) { return x(d.x + d.dx) - x(d.x); }) .attr("height", function(d) { return y(d.y + d.dy) - y(d.y); }); } });