如何在D3中将数据加载到多个数组中

时间:2016-04-03 09:16:07

标签: arrays d3.js

我已根据此example创建了一个等值区域地图。它工作正常,但我现在想添加按钮来切换我的tsv数据中的不同值:“rate”和“total”

id  rate    total
Macedonia   32.7    671000000
Turkey  22.8    10560000000

我想我需要两个数据集,以便我可以使用按钮在它们之间切换

rate = [{"id":"Estonia","rate":"6.6","id":"Latvia","rate":"13.7"}]
total =[{"id":"Estonia","total":"457000000","id":"Latvia","total":"286000000"}]

....

<button class="opts" value="rate">Rate</button>
<button class="opts" value="total">Total</button>

d3.selectAll('.opts')
  .on('click', function() {
    var data = eval(d3.select(this).property('value'));
    updateLegend(data);
  })

我使用d3.queue加载我的数据。如何将数据导入正确的结构?这就是我到目前为止所拥有的

d3_queue.queue()
    .defer(d3.json, "borders.json")
    .defer(d3.tsv, "data.tsv")
    .await(ready);    

function ready(error, rate, total) {    //This isn't working
   var rate = [{}];
   var total = [{}];

   data.forEach(function(d) {
    rate[d.id] = +d.rate;
    total[d.id] = d.total;

  });

Full code here

1 个答案:

答案 0 :(得分:0)

您定义的ratetotal变量是objets数组,而不是对象。所以你不能写:

total[d.id] = d.total; 

我认为你想要做的是:

total.push({id: d.id, value: d.total});

一个简单的选项可能只适用于data结构,并且可以在使用total之间切换