1

郡の SVG ファイルとそれぞれのデータの csv を使用して、クロロプレス マップを作成しようとしています。私は D3 が初めてで、geoJSON を使用した例に取り組んでいます (Scott Murray に感謝します)。この例では、次のようにデータを形状に関連付けます。

d3.json("us-states.json", function(json) {

                    //Merge the ag. data and GeoJSON
                    //Loop through once for each ag. data value
                    for (var i = 0; i < data.length; i++) {

                        var dataState = data[i].state;              //Grab state name
                        var dataValue = parseFloat(data[i].value);  //Grab data value, and convert from string to float

                        //Find the corresponding state inside the GeoJSON
                        for (var j = 0; j < json.features.length; j++) {

                            var jsonState = json.features[j].properties.name;

                            if (dataState == jsonState) {

                                //Copy the data value into the JSON
                                json.features[j].properties.value = dataValue;

                                //Stop looking through the JSON
                                break;

                            }
                        }       
                    }

                    //Bind data and create one path per GeoJSON feature
                    svg.selectAll("path")
                       .data(json.features)
                       .enter()
                       .append("path")
                       .attr("d", path)
                       .style("fill", function(d) {
                            //Get data value
                            var value = d.properties.value;

                            if (value) {
                                //If value exists…
                                return color(value);
                            } else {
                                //If value is undefined…
                                return "#ccc";
                            }
                       });

しかし、これをsvgに適応させるのに苦労しています。パスを作成する必要はありません-パスは既に存在しますが、基本的にどのように書くのでしょうか: "if data.County == path id, bind that row's data to the path" ?

どんな助けでも大歓迎です!!

4

1 に答える 1

1

https://github.com/mbostock/d3/wiki/Selections#wiki-datumをご覧ください。
次のようにします。

// Where each path has an id
var paths = d3.selectAll('.my-paths path'),
 elm,
 data = [] // your data here,
 your_criteria_here;

data.forEach(function (x, i, a) {

    your_criteria_here = x.criteria;

    // No data is available for the elements in this case yet
    // @see https://github.com/mbostock/d3/wiki/Selections#wiki-each
    paths.each(function (d, i) {

      // Wrap dom element in d3 selection
      elm = d3.select(this);

      if (elm.attr('id') == your_criteria_here) {
          // Do something here ...
      }

    });

});

この例では、ecmascript 5 の機能である [].forEach を使用していることに注意してください (@see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/forEach ) 。

于 2013-03-12T03:47:29.793 に答える