//version 1 var margin = {top: 50, right: 20, bottom: 20, left: 50}; var width = 450 - margin.right - margin.left; var height = width; //////////////////////////////////////////////// //////////////////////////////////////////////// // SET UP SCALES FOR CHART //////////////////////////////////////////////// var nest = d3.nest() .key(function(d) { return d.levelOfNeed; }).sortKeys(d3.ascending) .key(function(d) { return d.age; }).sortKeys(d3.ascending); var nested; var currentView = "costPerPerson"; var colour = d3.scaleOrdinal() .range([siuColours.orange, siuColours.teal, siuColours.green10, siuColours.purple10]); var svg = d3.select("#treemap-chart").append("svg") .attr("width", width + margin.left + margin.right) .attr("height", height + margin.top + margin.bottom); var gTreemap = svg.append("g") .attr("class", "g-treemap") .attr("transform", "translate("+ margin.left + ","+ margin.top + ")" ); var treemap = d3.treemap() .size([width , height]) .padding(1) .round(true) .tile(d3.treemapSliceDice); d3.csv("data.csv", convertTextToNumbers, function(error, data) { if (error) throw error; nested = nest.entries(data); var root = d3.hierarchy({values: nested}, function(d) { return d.values; }) .sum(function(d) { return d[currentView]; }) .sort(function(a, b) { return b.levelOfNeed - a.levelOfNeed; }); treemap(root); var cell = gTreemap.selectAll(".g-cells") .data(root.leaves()) .enter().append("g") .attr("class", "g-cells"); cell.append("rect") .attr("id", function(d) { return "rect-" + d.data.age + "-" + d.data.levelOfNeed; }) .style("fill", function(d) { return colour(d.data.age); } ); changeChart(0); }); function changeChart(transitionDuration) { if (currentView === "unit") { currentView = "totalCost"; } else if ( currentView === "totalCost" ) { currentView = "costPerPerson"; } else { currentView = "unit"; }; var root = d3.hierarchy({values: nested}, function(d) { return d.values; }) .sum(function(d) { return d[currentView]; }) .sort(function(a, b) { return b.levelOfNeed - a.levelOfNeed; }); treemap(root); d3.selectAll(".g-cells") .data(root.leaves()) .transition() .duration(transitionDuration) .attr("transform", function(d) { return "translate(" + d.y0 + "," + d.x0 + ")"; }); //switched the use of the x and y coordinates d3.selectAll("rect") .data(root.leaves()) .transition() .duration(transitionDuration) .attr("width", function(d) { return d.y1 - d.y0; }) // and the same here .attr("height", function(d) { return d.x1 - d.x0; }); // and the same here } function convertTextToNumbers(d) { d.totalCost = +d.totalCost; d.unit = +d.unit; d.costPerPerson = +d.costPerPerson; return d; };