使用d3.geo.mercator的气泡图

时间:2012-09-28 10:08:32

标签: javascript map d3.js geo bubble-chart

我是D3.js n00b,所以如果最终有一个我完全不知道的超级简单解决方案,我会道歉。无论如何,我正在尝试在世界地图上创建气泡图。它将类似于Symbol Maps但使用d3.geo.mercator而不是d3.geo.albersUsa。我正在使用world-countries.json文件并创建了我自己的world-country-centroids.json文件。有任何想法吗?这是代码:

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
    <title>Countries of the World</title>
    <script type="text/javascript" src="../../d3.v2.js"></script>
    <style type="text/css">

svg {
  width: 960px;
  height: 500px;
}

#countries path, #country-centroids circle {
  fill: #ccc;
  stroke: #fff;
  stroke-width: 1.5px;
}

#country-centroids circle {
  fill: steelblue;
  fill-opacity: .8;
}

    </style>
  </head>
  <body>
    <script type="text/javascript">

// The radius scale for the centroids
var r = d3.scale.sqrt()
    .domain([0, 1e6])
    .range([0, 10]);

// World Map Projection
var xy = d3.geo.mercator(),
    path = d3.geo.path().projection(xy);


var svg = d3.select("body").append("svg");
svg.append("g").attr("id", "countries");
svg.append("g").attr("id", "country-centroids");

d3.json("../data/world-countries.json", function(collection) {
  svg.select("#countries")
    .selectAll("path")
      .data(collection.features)
    .enter().append("path")
      .attr("d", d3.geo.path().projection(xy));
});

d3.json("../data/world-country-centroids.json", function(collection) {
  svg.select("#country-centroids")
    .selectAll("circle")
      .data(collection.features
      .sort(function(a, b) { return b.properties.population - a.properties.population; }))
    .enter().append("circle")
      .attr("transform", function(d) { return "translate(" + xy(d.geometry.coordinates) + ")"; })
      .attr("r", 0)
    .transition()
      .duration(1000)
      .delay(function(d, i) { return i * 50; })
      .attr("r", function(d) { return r(d.properties.population); });
});

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

1 个答案:

答案 0 :(得分:1)

您需要在SVG元素上设置widthheight属性才能使其可见。遗憾的是,这些属性不能通过样式属性设置,因为它们除了显示SVG元素的大小外,还定义了SVG的坐标系。

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

如果要重新缩放SVG元素(即,以与其原始大小不同的大小显示),可以将样式属性另外添加到属性中,但仍需要设置属性。