在利用d3.queue()

时间:2017-04-03 05:18:10

标签: javascript json csv d3.js

我发现很少有关于使用JSON文件进行映射和使用公共密钥加入指标的CSV文件的d3文档。

如果可能,我想使用d3.queue()。到目前为止,我一直在使用d3.map().set,但我发现它用于单键,值对,并且似乎不可用于> 1个值。如果我在这里,请有人纠正我。

我试图利用this bl.ock中找到的双for循环。这里的创建者正在使用两个JSON文件,而且我根据自己的需要很少运气。下面是他的两个JSON文件的链接,这是值得的。

tv.json

neilsontopo.json

要使用的连接键(我说比SQL好得多)是来自JSON的counties.id和CSV中的county_fips值。

CSV中的county_fips是否与其相关的指标趋于平缓,这是否有问题?上面链接的示例中的双for循环使用JSON的层次结构。

d3.queue()
    .defer(d3.json, "https://d3js.org/us-10m.v1.json")
    //.defer(d3.csv, "countymetrics_json.csv" , function(d) {metrics.set(d.county_fips, +d.actual_margin);})
    .defer(d3.csv, "https://raw.githubusercontent.com/MatthewSnellOKC/mapping/master/merge/countymetrics_json.csv", function(d) {metrics.set(d.county_fips, +d.actual_margin);})
    .await(ready);

function ready (error, us) {
    if (error) throw error;
    var counties = us.objects.counties.geometries;
}

1 个答案:

答案 0 :(得分:0)

我已使用d3.queue()d3.map().set转换,并且能够使用双for循环将CSV加入JSON。请参阅下面的工作代码。

d3.json("https://d3js.org/us-10m.v1.json", function(error, us) {
    if (error) throw error;

    d3.csv("countymetrics_json.csv", function(error, csv) {
        var counties = us.objects.counties.geometries;

        csv.forEach(function(d, i) {
            counties.forEach(function(e, j) {
                if (d.county_fips == e.id) {
                    e.actual_margin = d.actual_margin;
                    e.state_code = d.state_code;
                    e.state_name = d.state_name;
                    e.county = d.county;
                    e.county_population = d.county_population;
                    e.business_population = d.business_population;
                    e.active_merchants = d.active_merchants;
                    e.actual_margin = d.actual_margin;
                }
            })
        })
    })
});