2016-03-23 7 views
0

d3 ile çalışmaya başladım. Aynı içeriğe sahip, biri tsv ve diğeri json olmak üzere iki veri kümem var.d3.max, tsv ve json için farklı değerler döndürür (aynı içerik)

TSV: TSV

x y 
1 5 
5 15 
99 105 
101 104 

My kodu: x = 99 için, bu durumda

<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 dönüşleri, ve y = 5

i aynı ne zaman kodlanmış json yapısıyla:

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; })); 

doğru değerleri döndürür, x = 101, y = 105.

Neyi yanlış yapıyorum? Kontrol ettim , o tsv dosya diğerleri yorumlarda söylediğimiz gibi değerler

+0

tsv dizisi kullanımı 'd3.tsv.parse olarak tedavi (string [malzem]) ' – murli2308

+2

TSV sürümü değerleri sayılara dönüştürmez, bu nedenle maksimum hesaplama dize değerleri üzerinde gerçekleştirilir. Dize karşılaştırmaları Sayı karşılaştırmalarından farklı çalışır, böylece farklı bir sonuç elde edersiniz. – meetamit

cevap

1

kullanım

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

arasında, gerçekten sadece bir sekme içerir, sayısal değerlere x ve y dönüştürmek gerekir.

Bu deneyin: Bunu yapmak için değerleri zorlamak için her bir satır üzerinde çalışacağı bir accessor fonksiyonu geçmek

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; })); 
    } 
    ); 
İlgili konular