【问题标题】:D3.js Line Graph - Error: <path> attribute d: Expected numberD3.js 折线图 - 错误:<path> 属性 d:预期数字
【发布时间】:2018-04-01 15:53:16
【问题描述】:

我正在尝试使用此example 创建数据可视化。我正在尝试将自己的数据放入其中,但出现了一些错误,并且我看到了其他人的类似问题,但是我仍然无法弄清楚出了什么问题。我得到的错误是:

错误:属性 d:预期数字,“MNaN,251.47058823...”。
错误:属性 d:预期数字,“MNaN,198.52941176…”。

我的代码是:

var margin = {top: 20, right: 80, bottom: 30, left: 50},
    width = 900 - margin.left - margin.right,
    height = 500 - margin.top - margin.bottom;

var parseTime = d3.timeParse("%Y%m%d");

var x = d3.scaleTime().range([0, width]),
    y = d3.scaleLinear().range([height, 0]),
    z = d3.scaleOrdinal(d3.schemeCategory10);

var xAxis = d3.axisBottom(x)
    yAxis = d3.axisLeft(y);

var color = d3.scaleOrdinal(d3.schemeCategory10);

var line = d3.line()
    .curve(d3.curveBasis)
    .x(function(d) { return x(d.date); })
    .y(function(d) { return y(d.number); });

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 + ")");

d3.csv("testData3.csv", function(error, data) {

  color.domain(d3.keys(data[0]).filter(function(key) {
    return key !== "date";
  }));

  data.forEach(function(d) {
    d.date = parseTime(d.date);
  });

  var initials = color.domain().map(function(name) {
    return {
      name: name,
      values: data.map(function(d) {
        return {
          date: d.date,
          number: +d[name]
        };
      })
    };
  });

  x.domain(d3.extent(data, function(d) { return d.date; }));
  y.domain([d3.min(initials, function(c) { return d3.min(c.values, function(v) { return v.number; });}),
  d3.max(initials, function(c) { return d3.max(c.values, function(v) { return v.number; });})]);

  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("Temperature (ºC)");

  var initial = svg.selectAll(".initial")
    .data(initials)
    .enter().append("g")
    .attr("class", "initial");

  initial.append("path")
    .attr("class", "line")
    .attr("d", function(d) {
      return line(d.values);
    })
    .style("stroke", function(d) {
      return color(d.name);
    });

});

我创建了这个“数据集”来测试它:

date,GN,RM
1990-01-01,10,14
1991-01-01,8,15
1992-01-01,14,11
1993-01-01,22,8
1994-01-01,25,3
1995-01-01,21,4
1996-01-01,17,1
1997-01-01,19,-2
1998-01-01,20,-5
1999-01-01,20,-3
1990-02-01,16,4
1991-02-01,9,9
1992-02-01,-3,13
1993-02-01,2,15
1994-02-01,7,19
1995-02-01,7,20
1996-02-01,12,21
1997-02-01,16,26
1998-02-01,18,24
1999-02-01,19,29

提前谢谢你!

【问题讨论】:

    标签: javascript d3.js


    【解决方案1】:

    你的问题是:

    var parseTime = d3.timeParse("%Y%m%d");
    

    你的日期不是那种格式,试试:

    var parseTime = d3.timeParse("%Y-%m-%d");
    

    这是一个正在运行的plunker

    【讨论】:

    • @user9026955,什么不起作用?你得到同样的错误吗?你有没有看过我组装的那个笨蛋?
    • 我看过你的例子,我改变了你说的那行代码。但是,仍然有错误:错误: 属性 d:预期数字,“MNaN,251.47058823...”。错误: 属性 d:预期数字,“MNaN,198.52941176...”。
    • 它只是工作。似乎需要一段时间才能刷新。谢谢你:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 2017-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 2016-09-12
    相关资源
    最近更新 更多