d3.js topojson地图的样式填充不完全填充

时间:2014-12-15 21:38:14

标签: html css svg d3.js topojson

我正在尝试为topojson地图添加颜色。当我添加填充时,我得到了一个非常奇怪的输出,其中一些颜色被改变但是它的随机区域与之前一样。灰色图像是我添加填充之前的图像。我希望第二张地图完全是橙色。

without fill

with fill

代码如下:

<!DOCTYPE html>
<meta charset="utf-8">
<style>
path {
  stroke: white;
  stroke-width: 0.25px;
  fill: grey;
}

</style>
<body>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script src="http://d3js.org/topojson.v1.min.js"></script>
<script>
var width = 1200,
    height = 1200;

var projection = d3.geo.mercator()
    .center([0, 5 ])
    .scale(200)
    .rotate([-180,0]);

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

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

var g = svg.append("g");


// load and display the World
d3.json("us_states.json", function(error, us) {
  g.append("g")
      .attr("id", "states")
    .selectAll("path")
      .data(topojson.feature(us, us.objects.states).features)
    .enter().append("path")
      .attr("d", path)
      .style("fill", "#ffc04c"); //this is the offending line

  g.append("path")
      .datum(topojson.mesh(us, us.objects.states, function(a, b) { return a !== b; }))
      .attr("id", "state-borders")
      .attr("d", path);

});
var zoom = d3.behavior.zoom()
    .on("zoom",function() {
        g.attr("transform","translate("+ 
            d3.event.translate.join(",")+")scale("+d3.event.scale+")");
        g.selectAll("circle")
            .attr("d", path.projection(projection));
        g.selectAll("path")  
            .attr("d", path.projection(projection)); 

  });
svg.call(zoom)

</script>
</body>
</html>

1 个答案:

答案 0 :(得分:4)

问题实际上并非path s状态本身(您突出显示的行),但是在您之后追加的州边框中 - 这些是灰色的到您的CSS以及您所看到的内容。

要解决此问题,请在CSS中为fill: none设置path