d3.max返回tsv和json的不同值(相同内容)

时间:2016-03-23 12:55:44

标签: json csv d3.js max

我开始使用d3。 我有两个数据集,一个在tsv中,另一个在json中,具有相同的内容。

TSV:

x    y
1    5
5    15
99   105
101  104

我的tsv代码:

<script>
   d3.tsv("data/data.tsv", function(error, data) {
       console.log(d3.max(data, function(d) { return d.x; }));
       console.log(d3.max(data, function(d) { return d.y; }));
   });
</script>
在这种情况下,

d3.max返回x = 99,y = 5

当我用硬编码的json结构做同样的事情时:

 var data =  [
              { "x" : 1, "y" : 5 },
              { "x" : 5, "y" : 15 },
              { "x" : 99, "y" : 105 },
              { "x" : 101, "y" : 104 },
             ];

 console.log(d3.max(data, function(d) { return d.x; }));
 console.log(d3.max(data, function(d) { return d.y; }));

它返回正确的值,x = 101,y = 105。

那么我做错了什么? 我检查过,tsv文件只包含一个标签,值在

之间

2 个答案:

答案 0 :(得分:1)

使用

d3.tsv.parse(string[, accessor])

答案 1 :(得分:1)

正如其他人在评论中所说,您需要将x和y转换为数值。为此,传递accessor函数,该函数将对每一行进行操作以强制执行值:

试试这个:

   d3.tsv("data/data.tsv", 
     function(d){
        return {
          x: +d.x, //<-- convert to float from string 
          y: +d.y
        }
     },
     function(error, data) {
       console.log(d3.max(data, function(d) { return d.x; }));
       console.log(d3.max(data, function(d) { return d.y; }));
     }
   );