2016-04-03 19 views
0

私はこの​​に基づいてchoroplethマップを作成しました。それが正常に動作し、しかし、私は今、私のTSVデータに異なる値を切り替えるには、ボタンを追加したいと思います:「率」と「合計」D3で複数の配列にデータをロードする方法

id rate total 
Macedonia 32.7 671000000 
Turkey 22.8 10560000000 

は私が切り替えるためのボタンを使用できるように、私は2つのデータセットが必要だと思いますその間に

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を使用しています。データを正しい構造にするにはどうすればよいですか?これは、私はあなたが定義されratetotal変数はオブジェではなく、オブジェクトの配列で、これまで

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

答えて

0

持っているものです。だから、あなたが書き込むことはできません。

total[d.id] = d.total; 

は、私はあなたが何をしたいのかを考えることです。

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

一つの簡単なオプションがdata構造にあるかもしれない、とtotal

+0

感謝を使用しての間で切り替えることが君は!それは私の配列を修正します。しかし、私は色が壊れているように見えますが、私はここで何を参照すべきか知っていますか? (d){}を返すhttps://plnkr.co/edit/ofFGECDYEPjokxn5EN7C?p=info – user3821345

+0

私はこれを実行しませんでした。 d3を使って 'rate'と' total'を直接バインドしているわけではないので、実際には完全なコードを見てください。あなたのコードは次のようになります:https://plnkr.co/edit/gaXlgTuHxGL4zvBDSQkZ?p = preview レートと合計の値が非常に異なるので、 'updateLegend'の一環として' quantize.domain() 'を更新する必要があります。 – yeahwhat

+0

良いアイデアです、ありがとう! – user3821345

関連する問題