block by martgnz 8022f289a6057a51b7ad0fe25ab55637

2016 World Press Freedom Index

Full Screen

Source: RSF.

Get the data.

index.html

<!DOCTYPE html>
<meta charset="utf-8" /> 
<body>
<style>
body {
  max-width: 960px;
  position: relative;
}
.tooltip {
  position: absolute;
  z-index: 1;
  width: 250px;
  height: 40px;
  padding: 8px;
  background: rgb(255,255,255);
  font-family: "Helvetica Neue", "Helvetica", Arial sans-serif;
  font-size: 12px;
  border: 1px solid rgba(0,0,0,0.2);
  box-shadow: 0 3px 5px rgba(0,0,0,0.5),0 0 0 1px rgba(0,0,0,.08);
  border-radius: 2px;
  pointer-events: none;
}
.g-place {
  border-bottom: 1px solid rgb(130,130,130);
  padding-bottom: 3px;
  margin-bottom: 5px;
}
.g-headline {
  font-size: 16px;
}
.g-sub {
  color: rgb(130,130,130);
}
.g-value {
  float: right;
}
.legend {
  position: absolute;
  right: 0;
  bottom: 0;
  font-family: "Helvetica Neue", sans-serif;
  font-size: 12px;
  height: 100px;
  width: 170px;
  text-shadow: 1px 1px 0 #fff, 1px -1px 0 #fff, -1px 1px 0 #fff, -1px -1px 0 #fff;
}
</style>
<script src="https://d3js.org/d3.v3.min.js" charset="utf-8"></script>
<script src="https://d3js.org/topojson.v1.min.js"></script>
<script src="https://unpkg.com/rbush@1.4.3/rbush.js"></script>
<script src="https://unpkg.com/spamjs@1.1.0/spam.min.js"></script>
<script src="https://unpkg.com/d3-svg-legend@1.13.0/d3-legend.min.js"></script>

<script type='text/javascript'>
var hover = null;
var graticule = d3.geo.graticule();

var tooltip = d3
  .select("body")
  .append("div")
  .attr("class", "tooltip")
  .style("opacity", 0);

document.onmousemove = handleMouseMove;

function handleMouseMove(event) {
  mouseX = event.pageX;
  mouseY = event.pageY;

  tooltip.style("left", mouseX - 100 + "px").style("top", mouseY + 25 + "px");
}

var color = d3.scale
  .ordinal()
  .domain([
    "Very serious situation",
    "Difficult situation",
    "Noticiable problems",
    "Satisfactory situation",
    "Good situation"
  ])
  .range([
    "rgb(0, 0, 0)",
    "rgb(252, 52, 51)",
    "rgb(252, 136, 0)",
    "rgb(255, 215, 18)",
    "rgb(255, 240, 179)"
  ]);

d3
  .select("body")
  .append("svg")
  .attr("class", "legend");

var legend = d3.legend
  .color()
  .shapeHeight(10)
  .shapeWidth(20)
  .shapePadding(5)
  .labelOffset(10)
  .orient("vertical")
  .labelAlign("start")
  .ascending(true)
  .scale(color);

d3.select(".legend").call(legend);

d3.json("world.json", function(error, d) {
  topojson.presimplify(d);

  var map = new StaticCanvasMap({
    element: "body",
    width: 960,
    projection: d3.geo.equirectangular(),
    data: [
      {
        features: topojson.feature(d, d.objects["world"]),

        static: {
          prepaint: function(parameters) {
            parameters.path(graticule());
            parameters.context.lineWidth = 0.5;
            parameters.context.strokeStyle = "rgb(230,230,230)";
            parameters.context.stroke();
          },
          paintfeature: function(parameters, d) {
            if (d.properties.fill == null) {
              parameters.context.fillStyle = "#fff";
            } else {
              parameters.context.fillStyle = d.properties.fill;
            }

            parameters.context.fill();

            parameters.context.lineWidth = 0.5;
            parameters.context.strokeStyle = "rgb(30,30,30)";
            parameters.context.stroke();
          }
        },
        dynamic: {
          postpaint: function(parameters) {
            if (!hover || !hover.properties.ranking) {
              tooltip.style("opacity", 0);
              return;
            }

            parameters.context.beginPath();
            parameters.context.lineWidth = 1 / parameters.scale;
            parameters.path(hover);
            parameters.context.stroke();

            tooltip
              .style("opacity", 1)
              .html(
                "<div class='g-place'>" +
                  "<span class='g-headline'>" +
                  hover.properties.name +
                  "</span><br />" +
                  "</div>" +
                  "<span>World Press Freedom Index</span>" +
                  "<span class='g-value'>" +
                  hover.properties.ranking +
                  "</span>"
              );
          }
        },
        events: {
          hover: function(parameters, d) {
            hover = d;

            parameters.map.paint();
          }
        }
      }
    ]
  });

  map.init();
});
</script>