如何使用自定义图表加入mercator地图?

时间:2014-03-17 03:16:18

标签: javascript html d3.js charts mercator

考虑一个索引文件,如下所示

    <!DOCTYPE html>
<html>
  <head>
    <title>The d3 test</title>
        <style>

        .grid .tick {
      stroke: lightgrey;
      opacity: 0.7;
        }
          .grid path {
     stroke-width: 0;
        }
     .chart {
            }
     .main text {
font: 10px sans-serif;
        }
      .axis line, .axis path {
        shape-rendering: crispEdges;
stroke: black;
fill: none;
   }
   circle {
fill: steelblue;
  }

      </style>
    <script type="text/javascript" src="d3.v2.js"></script>
  </head>
  <body>
    <div class='content'>
      <!-- /the chart goes here -->
    </div>
    <script type="text/javascript" src="scatterchart.js"></script>

  </body>
</html>

和scatterplot.js如下所示

     var data = [
[2, 2],
[2, 5],
[6, 6],
[6, 7],
[25, 25]
   ];

   var margin = {
top: 20,
right: 15,
bottom: 60,
left: 60
      }, width = 960 - margin.left - margin.right,
height = 500 - margin.top - margin.bottom;

   var x = d3.scale.linear()
.domain([0, d3.max(data, function (d) {
return d[0];
  })])
.range([0, width]);

      var y = d3.scale.linear()
.domain([0, d3.max(data, function (d) {
return d[1];
    })])
//.range([height, 0]) //flip y
      .range([0, height]);

     var chart = d3.select('body')
     .append('svg:svg')
   .attr('width', width + margin.right + margin.left)
         .attr('height', height + margin.top + margin.bottom)
    .attr('class', 'chart');

     var main = chart.append('g')
.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')')
.attr('width', width)
.attr('height', height)
.attr('class', 'main');

  // draw the x axis
      var xAxis = d3.svg.axis()
      .scale(x)
       //.orient('bottom')
      .orient('top'); // adjust ticks to new x axis position

        main.append('g')
    //.attr('transform', 'translate(0,' + height + ')')
     .attr('transform', 'translate(0,0)') // move x axis up
      .attr('class', 'main axis date')
        .call(xAxis);

        // draw the y axis
      var yAxis = d3.svg.axis()
      .scale(y)
     .orient('left');

         main.append('g')
        .attr('transform', 'translate(0,0)')
.attr('class', 'main axis date')
.call(yAxis);

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

    g.selectAll("scatter-dots")
      .data(data)
       .enter().append("svg:circle")
       .attr("cx", function (d, i) {
        return x(d[0]);
         }) 
         .attr("cy", function (d) {
           return y(d[1]);
         }) 
       .attr("r", 8);

         main.append("g")
        .attr("class", "grid")
.attr("transform", "translate(0," + height + ")")
.call(make_x_axis()
.tickSize(-height, 0, 0)
.tickFormat(""))

     main.append("g")
.attr("class", "grid")
.call(make_y_axis()
.tickSize(-width, 0, 0)
.tickFormat(""))

    function make_x_axis() {
return d3.svg.axis()
    .scale(x)
    .orient("bottom")
    .ticks(10)
     }

      function make_y_axis() {
return d3.svg.axis()
    .scale(y)
    .orient("left")
    .ticks(10)
       }

现在考虑一个mercator地图,如此链接http://bl.ocks.org/mbostock/3757119

所示

如何将mercator地图放置在图表上方,以创建图表和地图的混搭。

0 个答案:

没有答案