Changing background map projection with d3.js

This post describes how to change the projection of your background map. (See here for explanations on basic map). Picking the right projection is a crucial step in your project, since shapes can be really different from one to the other and thus convey a different message. See this blog post to read more about it.

Background map section


  • This code is very similar to the previous step: basic background map in d3

  • It just illustrate the possibilities of the geo-projection plugin.

  • Just pick the most appropriate one for your project: d3.geoAiry(), d3.geoAitoff(), d3.geoArmadillo(), d3.geoAzimuthalEqualArea(), d3.geoBaker(), d3.geoBoggs(), and many many more on the reference page.

  • Heavy data? It is a good practice to apply this transformation on the geoJson file directly -> avoid loading time in the browser.
<!DOCTYPE html>
<meta charset="utf-8">

<!-- Load d3.js -->
<script src=""></script>
<script src=""></script>
<script src=""></script>

<!-- Create an element where the map will take place -->
<svg id="my_dataviz" width="400" height="300"></svg>


// The svg
var svg ="svg"),
    width = +svg.attr("width"),
    height = +svg.attr("height");

// Map and projection. Try:  d3.geoAiry() / d3.geoAitoff() / d3.geoArmadillo() / d3.geoAugust() / d3.geoAzimuthalEqualArea() / d3.geoAzimuthalEquidistant() and more
var projection = d3.geoAitoff()
    .scale(width / 1.3 / Math.PI)
    .translate([width / 2, height / 2])

// Load external data and boot
d3.json("", function(data){

    // Draw the map
            .attr("fill", "#69b3a2")
            .attr("d", d3.geoPath()
            .style("stroke", "#fff")


Related blocks →

  • World Choropleth - link

  • Projection Transitions - link