我正在解析一些数据以显示在图表中,但是当我解析整数时,我一直得到NaN。我知道这通常意味着他们没有被正确解析,但我正在使用parseint
而我认为这会解决问题。我正在解析Unixtime(第一个字段),然后解析其他三个字段(正确解析)。然而,每当我去展示Unix时它就失败了。我已经为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
答案 0 :(得分:1)
问题在于这一行:
d.Unixtime = parseInt(d.Unixtime/1000);
当你除以1000时,你得到一个十进制数。请尝试parseFloat()
:
d.Unixtime = parseFloat(d.Unixtime/1000);
或者,转换为int后可以/1000
:
d.Unixtime = parseInt(d.Unixtime)/1000;
答案 1 :(得分:0)
事实证明,根据Alvaro的建议,console.log(d.Unixtime)打印未定义。有了这个,我回过头来注意到该字段的名称在某种程度上改变了时间,而不是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};
})
};
});