我已根据此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;
});
答案 0 :(得分:0)
您定义的rate
和total
变量是objets数组,而不是对象。所以你不能写:
total[d.id] = d.total;
我认为你想要做的是:
total.push({id: d.id, value: d.total});
一个简单的选项可能只适用于data
结构,并且可以在使用total
之间切换