2012-04-09 34 views
23

Verileri JSON kullanarak takvim görselleştirmemde okumaya çalışıyorum.d3 - CSV dosyası yerine JSON verilerini okuma

d3.csv("RSAtest.csv", function(csv) { 
    var data = d3.nest() 
    .key(function(d) { return d.date; }) 
    .rollup(function(d) { return d[0].total; }) 
    .map(csv); 

rect.filter(function(d) { return d in data; }) 
     .attr("class", function(d) { return "day q" + color(data[d]) + 
"-9"; }) 
     .select("title") 
     .text(function(d) { return d + ": " + data[d]; }); 

}); 

Aşağıdaki CSV veri okur: bir CSV dosyası ile inşaat büyük an az

date,total 
2000-01-01,11 
2000-01-02,13 
. 
. 
.etc 

yerine aşağıdaki JSON veri okuyabilir nasıl bir işaretçiler: {"2000-01-01":19,"2000-01-02":11......etc}

Aşağıdakileri denedim ama çalışmaz (datareadCal.php benim için tükürür):

d3.json("datareadCal.php", function(json) { 
    var data = d3.nest() 
    .key(function(d) { return d.Key; }) 
    .rollup(function(d) { return d[0].Value; }) 
    .map(json); 

sayesinde

cevap

13

Sen anahtar/değer çiftleri bir diziye değişmez bir nesne açmak için d3.entries() kullanabilirsiniz:

var countsByDate = {'2000-01-01': 10, ...}; 
var dateCounts = d3.entries(countsByDate); 
console.log(JSON.stringify(dateCounts[0])); // {"key": "2000-01-01", "value": 10} 

Bir şey fark edeceğiniz olsa olduğunu sonuçlanan dizi değil mi düzgün bir şekilde sıralanmadı. Öyle gibi anahtar artan göre sıralayabilirsiniz:

dateCounts = dateCounts.sort(function(a, b) { 
    return d3.ascending(a.key, b.key); 
}); 
+0

Merhaba Shawn, teşekkürler almak için Bu konuda bana geri ama hala oldukça kayboldum. D3 takvim örneğini bir JSON kullanmak için CSV dosyasından okunan verileri kullanarak değiştirmek istedim: http://mbostock.github.com/d3/ex/calendar.html – eoin

+0

Merhaba Shawn, anlamaya biraz zamanımı aldı (Ben gece okulu ile programlama olmayan bir günlük iş hokkabazlık ve kendimi veri viz ve programlama öğretiyorum ..) ama haklı olduğumun anahtarı JSON d3.entries ile biçimlendirmektir. Bu çalıştı ama kodumda başka nerede benim boş takvim çerçeve yılı benim veriler yılı ile eşleştirmek için unuttum.Başka bir deyişle benim boş takvim 1999 ve benim JSON veri 2000 oldu. Tüm yardım ve sabır için teşekkürler . – eoin

6
html dosyasına dahil olan bir .js dosya halinde .json dosyasını açın

. senin .js dosyası içinde var:

var countsByDate = {'2000-01-01':10,...}; 

Sonra countsByDate .... bir dosyadan başına okunan gerek başvurabilir.

Ve birlikte okuyabilirsiniz: Bir kenara

var data = d3.nest() 
.key(function(d) { return d.Key; })   
.entries(json);  

.... o kadar da json kurmak için daha iyi olduğunu söylüyor d3.js:

var countsByDate = [ 
    {Date: '2000-01-01', Total: '10'}, 
    {Date: '2000-01-02', Total: '11'}, 
]; 
+1

Teşekkürler Ginny bu gerçekten yardımcı oldu. – eoin

+1

Bu gerçekten hacky sesleri – circuitry