2016-11-16 12 views
0

次のD3マップを作成しました。地図を作成しましょう tutorial M. Bostock。D3のsvg要素に色付けできません

.subunit.idクラスを作成し、.subunit.23 { fill: #f44242; }のようなCSSを使用して色付けすることを意図しています。しかし、がうまくいきますが、idを指定することで各ユニットに到達することはできません。何か案は?

TopoJSONファイルはここに
https://gist.github.com/Avtan/649bbf5a28fd1f76278c752aca703d18

<!DOCTYPE html> 
<meta charset="utf-8"> 
<html lang="en"> 
<style> 
    .subunit { 
    fill: #4286f4; 
    stroke: #efbfe9;} 
    .subunit.23 { fill: #f44242; } 
</style> 
    <head> 
     <title>D3 Uzbekisztan map</title> 
<meta charset="utf-8"> 

<script src="http://d3js.org/d3.v3.min.js"></script> 
<script src="http://d3js.org/topojson.v1.min.js"></script> --> 

</head> 
<body> 

<script> 

    var width = 960, 
     height = 1160; 

    var projection = d3.geo.albers() 
     .center([-10, 40]) 
     .rotate([-75, 0]) 
     .parallels([38, 44]) 
     .scale(4000) 
     .translate([width/2, height/2]); 


    var path = d3.geo.path() 
     .projection(projection); 

    var svg = d3.select("body") 
      .append("svg") 
       .attr("width", width) 
       .attr("height", height); 

    d3.json("uzb_topo.json", function (error, uzb) { 
     if (error) return console.error(error); 
     console.log(uzb); 

      svg.selectAll(".subunit") 
      .data(topojson.feature(uzb, uzb.objects.uzb).features) 
      .enter().append("path") 
      .attr("class", function(d) { return "subunit " + d.id; }) 
      .attr("d", path); 

    }); 

</script> 

</body> 
</html> 

答えて

0

可能ですIDは数によって開始することはできません。今、あなたは2つの異なるクラスを設定しています。最後のクラスは数字で始まります。

単純な解決策は、クラス名のスペースを削除することです。だから、この:

.attr("class", function(d) { return "subunit " + d.id; }) 

は、このことが必要です。

.attr("class", function(d) { return "subunit" + d.id; })//no space 

し、それに応じて、あなたのCSSを設定します。

別の解決策は、このように、番号の前に文字を追加します

.attr("class", function(d) { return "subunit " + "a" + d.id; }) 

だから、あなたがクラス "A01"、 "A02"、 "A03" などがあるでしょう...

関連する問題