在等值线图中动态改变率Id.set

时间:2014-02-26 21:21:28

标签: jquery d3.js

我正在尝试使用jqueryslider修改Mike Bostock的chloropeth地图,而不是

queue()
    .defer(d3.json, "/mbostock/raw/4090846/us.json")
    .defer(d3.tsv, "unemployment.tsv", function(d) { rateById.set(d.id, +d.rate); })
    .await(ready); 

我有

function refresh(p) {
        queue()
            .defer(d3.json, "us.json")
            .defer(d3.csv, "unemployment2.csv", function (d,p) {
                rateById.set(d.id, +p);    
            })
            .await(ready);
        console.log(p);
    }

我正在使用下面的代码

捕获滑块中的值
$(function () {
        $("#slider").slider({
            value: 100,
            min: 2000,
            max: 2013,
            step: 1,
            slide: function (event, ui) {
                $("#year").val(ui.value);
                refresh("+d.rate" + ui.value);
            }
        });
        $("#year").val($("#slider").slider("value"));

    });

当我将p写入控制台时,它按照我的要求输出为d.rate2013,d.rate2012等,但该值不会进入rateById.set。我也得到了一个氯通道图,当我向滑块前进时,线逐渐消失。

1 个答案:

答案 0 :(得分:1)

你通过在函数中再次声明它来隐藏p,即它应该是

.defer(d3.csv, "unemployment2.csv", function (d) {
     rateById.set(d.id, +p);    
})

您还想传入列的名称,而不是javascript代码。就是这样做

refresh("rate" + ui.value);

然后

.defer(d3.csv, "unemployment2.csv", function (d) {
     rateById.set(d.id, +d[p]);    
})

总的来说,每次移动滑块时都不需要重新加载数据,只需要迭代数据并将rateById设置为适当的值。