为什么我的d3.js堆积条形图中的属性为y =“NaN”和height =“NaN”?

时间:2015-06-24 11:39:39

标签: javascript d3.js

这是我的问题,我得到的错误是:错误:属性的值无效y =“NaN”o @ d3.v3.min.js:1 44d3.v3.min.js:1错误:属性height的值无效=“NaN”

这是我的代码:

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

body {
  font: 10px sans-serif;
}

.axis path,
.axis line {
  fill: none;
  stroke: #000;
  shape-rendering: crispEdges;
}

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

    //Geef waardes van marge, breedte en hoogt, hier wordt later weer naar terug gerefereerd
var margin = {top: 20, right: 20, bottom: 80, left: 70},
    width = 960 - margin.left - margin.right,
    height = 500 - margin.top - margin.bottom;

    //Geeft breedte van de bars op de x-as
var x = d3.scale.ordinal()
    .rangeRoundBands([0, width], .1);

    //Y-as, met hoogte
var y = d3.scale.linear()
    .rangeRound([height, 0]);

    //Geeft kleuren van de bars
var color = d3.scale.ordinal()
    .range(["#FAB048", "#4D85E0", "#FB6565", "#F2B929"]);

    //Geeft met vooraf gegeven waardes aan waar text moet komen
var xAxis = d3.svg.axis()
    .scale(x)
    .orient("bottom");

    //Wederom vooraf gegeven waardes waar text moet komen
var yAxis = d3.svg.axis()
    .scale(y)
    .orient("left");

    //SVG geeft hoeveelheid scherm wat getoont wordt
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 + ")");

    //Inladen csv van site, daarna elke waarde van Periods oproepen
d3.csv("http://arnoutdael.github.io/External_migration_MSDOS.csv", function(error, dataset) {

    //Data die moet worden weergeven
  var data = [];
          for (i = 0; i < dataset.length; i++) {
            var Periods1950 = {
                Periods : dataset[i].Periods,
                immigration : dataset[i].immigration,
                immigration25 : dataset[i].immigration25,
                immigration65 : dataset[i].immigration65,
                emigration : dataset[i].emigration
            }
            //Nieuwe data voor array
            data.push(Periods1950); 
        }
  color.domain(d3.keys(data[0]).filter(function(key) { return key !== "Periods"; }));

  //Verkrijgen alle values
  data.forEach(function(d) {
    var y0 = 0;
    d.values = color.domain().map(function(name) { return {name: name, y0: y0, y1: y0 += +d[name]}; });
    d.total = d.values[d.values.length - 1].y1;
  });

  data.sort(function(a, b) { return b.total - a.total; });

  x.domain(data.map(function(d) { return d.Periods; }));
  y.domain([0, d3.max(data, function(d) { return d.total; })]);

    //Tekst van x-as
    svg.append("g")
        .attr("class", "x axis")
        .attr("transform", "translate(0," + height + ")")
        .call(xAxis)
        .selectAll("text")  
        .style("text-anchor", "end")
        .attr("dx", "-.8em")
        .attr("dy", ".15em")
        .attr("transform", function(d) {
            return "rotate(-65)" 
        })
    svg.append("text")
        .attr("x", 850)
        .attr("y", 440)
        .attr("dy", ".71em")
        .style("text-anchor", "end")
        .text("Periods");

  //Tekst van y-as
  svg.append("g")
      .attr("class", "y axis")
      .call(yAxis)
    .append("text")
      .attr("transform", "rotate(-90)")
      .attr("y", 3)
      .attr("dy", ".71em")
      .style("text-anchor", "end")
      .text("Population");

  //Geeft Periodstallen
  var Periods = svg.selectAll(".Periods")
      .data(data)
    .enter().append("g")
      .attr("class", "g")
      .attr("transform", function(d) { return "translate(" + x(d.Periods) + ",0)"; });

  //Creëert de bars
  Periods.selectAll("rect")
      .data(function(d) { return d.values; })
    .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); });

  //Legenda tekst
  var legend = svg.selectAll(".legend")
      .data(color.domain().slice().reverse())
    .enter().append("g")
      .attr("class", "legend")
      .attr("transform", function(d, i) { return "translate(0," + i * 20 + ")"; });

  //Creërt bars van legenda (kleuren)     
  legend.append("rect")
      .attr("x", width - 18)
      .attr("width", 18)
      .attr("height", 18)
      .style("fill", color);

  //Legenda tekst positie     
  legend.append("text")
      .attr("x", width - 24)
      .attr("y", 9)
      .attr("dy", ".35em")
      .style("text-anchor", "end")
      .text(function(d) { return d; });

});

</script>

1 个答案:

答案 0 :(得分:1)

您传递的CSV不是逗号(,)分隔符,它们是分号(;)分隔。

以逗号分隔。

由于上述问题,JSON未被创建,因此一切都变为NAN。