d3.js - Stacked bars not showing up with unique sets of data -


i trying show different countries , citywise population using stacked bar chart data set being unique cities , countries being uniquely exclusive each other chart showing first data in set per code. how make work show data in different stacked bars each country. here code have tried far : https://jsbin.com/qopazukahi/edit?html,output.

below dataset:

var data=[   {     "country": "india",     "delhi": 310504,     "kolkata": 552339,     "chennai": 259034,   },   {     "country": "australia",     "melbourne": 62083,     "sydney": 85640,     "perth": 42153,     "canberra": 74257,     },   {     "country": "usa",     "new york": 415910,     "miami": 828669,     "frankfort": 362642,     "portland": 601943,     "topeka": 1804762,   },  ]; 

here complete code:

<!doctype html> <meta charset="utf-8"> <style>  body {   font: 10px sans-serif; }  .axis path, .axis line {   fill: none;   stroke: #000;   shape-rendering: crispedges; }  .bar {   fill: steelblue; }  .x.axis path {   display: none; }  </style> <body> <script src="//d3js.org/d3.v3.min.js"></script> <script>  var margin = {top: 20, right: 20, bottom: 30, left: 40},     width = 960 - margin.left - margin.right,     height = 500 - margin.top - margin.bottom;  var x = d3.scale.ordinal()     .rangeroundbands([0, width], .1);  var y = d3.scale.linear()     .rangeround([height, 0]);  var color = d3.scale.ordinal()     .range(["#98abc5", "#8a89a6", "#7b6888", "#6b486b", "#a05d56", "#d0743c", "#ff8c00"]);  var xaxis = d3.svg.axis()     .scale(x)     .orient("bottom");  var yaxis = d3.svg.axis()     .scale(y)     .orient("left")     .tickformat(d3.format(".2s"));  var svg = d3.select("body").append("svg")     .attr("width", width + margin.left + margin.right)     .attr("height", height + margin.top + margin.bottom)   .append("g")     .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); var data=[   {     "country": "india",     "delhi": 310504,     "kolkata": 552339,     "chennai": 259034,   },   {     "country": "australia",     "melbourne": 62083,     "sydney": 85640,     "perth": 42153,     "canberra": 74257,     },   {     "country": "usa",     "new york": 415910,     "miami": 828669,     "frankfort": 362642,     "portland": 601943,     "topeka": 1804762,   },  ];    color.domain(d3.keys(data[0]).filter(function(key) { return key !== "country"; }));    data.foreach(function(d) {     var y0 = 0;     d.ages = color.domain().map(function(name) { return {name: name, y0: y0, y1: y0 += +d[name]}; });     d.total = d.ages[d.ages.length - 1].y1;   });    data.sort(function(a, b) { return b.total - a.total; });    x.domain(data.map(function(d) { return d.country; }));   y.domain([0, d3.max(data, function(d) { return d.total; })]);    svg.append("g")       .attr("class", "x axis")       .attr("transform", "translate(0," + height + ")")       .call(xaxis);    svg.append("g")       .attr("class", "y axis")       .call(yaxis)     .append("text")       .attr("transform", "rotate(-90)")       .attr("y", 6)       .attr("dy", ".71em")       .style("text-anchor", "end")       .text("population");    var country = svg.selectall(".country")       .data(data)     .enter().append("g")       .attr("class", "g")       .attr("transform", function(d) { return "translate(" + x(d.country) + ",0)"; });    country.selectall("rect")       .data(function(d) { return d.ages; })     .enter().append("rect")       .attr("width", x.rangeband())       .attr("y", function(d) { return y(d.y1); })       .attr("height", function(d) { return y(d.y0) - y(d.y1); })       .style("fill", function(d) { return color(d.name); });    var legend = svg.selectall(".legend")       .data(color.domain().slice().reverse())     .enter().append("g")       .attr("class", "legend")       .attr("transform", function(d, i) { return "translate(0," + * 20 + ")"; });    legend.append("rect")       .attr("x", width - 18)       .attr("width", 18)       .attr("height", 18)       .style("fill", color);    legend.append("text")       .attr("x", width - 24)       .attr("y", 9)       .attr("dy", ".35em")       .style("text-anchor", "end")       .text(function(d) { return d; });  </script> 

needed consider data[] indexes present in data array below:

data.foreach(function(d,i) {             var y0 = 0;             d.ages = d3.keys(data[i]).filter(function(key) { return  !key.match(/country/); }).map(function(name) {                  return {name: name, y0: y0, y1: y0 += +d[name]};              }); 

here workig bin : https://jsbin.com/qopazukahi/edit?html,output


Comments

Popular posts from this blog

Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12:test (default-test) on project.Error occurred in starting fork -

windows - Debug iNetMgr.exe unhandle exception System.Management.Automation.CmdletInvocationException -

unity3d - Fatal error- Monodevelop-Unity failed to start -