0

我正在解析一些数据以显示在图表中,但是当我解析我的整数时,我总是得到 NaN。我知道这通常意味着它们没有被正确解析,但我正在使用parseint并且我认为这可以解决问题。我正在解析 Unixtime(第一个字段),然后是其他三个字段(正确解析)。然而,每当我去显示 Unixtime 时,它​​都会失败。我已经为 x 声明了 scale.linear,尽管 time.scale 也失败了。

我正在使用的代码片段如下:

d3.tsv("<?php echo $field; ?>values.tsv", function(error, data) {
  color.domain(d3.keys(data[0]).filter(function(key) { return key !== "Unixtime"; }));
  data.forEach(function(d) {
    d.Unixtime = parseInt(d.Unixtime/1000);
  });
  var cities = color.domain().map(function(name) {
    return {
      name: name,
      values: data.map(function(d) {
        return {Unixtime: d.Unixtime, value: parseFloat(d[name]/1000)};
      })
    };
  });

我收到的错误消息来自 Chrome 调试器。

Error: Problem parsing d="MNaN,1.7527908403982337CNaN,1.7527908403982337,NaN,1.7527908403982337,NaN,1.751122428294669CNaN

数据如下:

1353168433      5557    6404    5510

1353175632      5478    6404    5510

1353182750      5432    6404    5510
4

2 回答 2

1

问题是这一行:

d.Unixtime = parseInt(d.Unixtime/1000);

当你将它除以 1000 时,你会得到一个十进制数。请尝试parseFloat()

d.Unixtime = parseFloat(d.Unixtime/1000);

或者,您可以/1000在转换为 int 后:

d.Unixtime = parseInt(d.Unixtime)/1000;
于 2012-12-11T15:33:46.257 回答
0

事实证明,根据 Alvaro 的建议,console.log(d.Unixtime) 打印为 undefined。有了这个,我回去注意到该字段的名称以某种方式更改为时间,而不是 unixtime。更改后,它可以工作。谢谢大家!

d3.tsv("<?php echo $field; ?>values.tsv", function(error, data) {
  color.domain(d3.keys(data[0]).filter(function(key) { return key !== "time"; }));
  data.forEach(function(d) {
    d.Unixtime = parseInt(d.time,10)/1000;
  });
  var cities = color.domain().map(function(name) {
    return {
      name: name,
      values: data.map(function(d) {
        return {time: d.time, value: parseFloat(d[name],10)/1000};
      })
    };
  });
于 2012-12-11T16:09:33.850 回答