2016-03-23 8 views
0

d3で作業を開始しました。 私は2つのデータセットを持っています.1つはtsvにあり、もう1つはjsonにあり、同じ内容です。d3.maxがtsvとjson(同じ内容)の値を返します

TSV:TSV用

x y 
1 5 
5 15 
99 105 
101 104 

マイコード:X = 99のため、この場合に

<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戻り、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ファイルは、他の人がコメントで言ったように値

+0

これを試してください。これを行うには、値を強制するために、各行に動作するaccessor関数を渡します' – murli2308

+2

TSVバージョンは値を数値に変換しないため、最大計算は文字列値に対して実行されます。文字列の比較はNumberの比較とは異なるため、異なる結果が得られます。 – meetamit

答えて

1

使用

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

間、本当に一つだけのタブが含まれている、あなたは数値にxとyを変換する必要があります。ストリング使用 `d3.tsv.parse(文字列[、アクセッサ])として扱いTSV

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; })); 
    } 
    ); 
関連する問題