Choropleth using D3.js - List of metropolitan areas in Spain
Information from Wikipedia
<!DOCTYPE html> | |
<meta charset="utf-8"> | |
<style> | |
.subunit-boundary { | |
fill: none; | |
stroke: #777; | |
stroke-dasharray: 2,2; | |
stroke-linejoin: round; | |
} | |
.place, | |
.place-label { | |
fill: red; | |
} | |
text { | |
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; | |
font-size: 10px; | |
pointer-events: none; | |
text-transform: capitalize; | |
font-weight: bold; | |
} | |
div.tooltip { | |
position: absolute; | |
text-align: center; | |
width: 60px; | |
height: 18px; | |
padding: 2px; | |
font: 10px sans-serif; | |
background: lightsteelblue; | |
border: 0px; | |
border-radius: 8px; | |
pointer-events: none; | |
} | |
.q0-9 { fill:rgb(247,251,255); } | |
.q1-9 { fill:rgb(222,235,247); } | |
.q2-9 { fill:rgb(198,219,239); } | |
.q3-9 { fill:rgb(158,202,225); } | |
.q4-9 { fill:rgb(107,174,214); } | |
.q5-9 { fill:rgb(66,146,198); } | |
.q6-9 { fill:rgb(33,113,181); } | |
.q7-9 { fill:rgb(8,81,156); } | |
.q8-9 { fill:rgb(8,48,107); } | |
.legend { | |
display: table; | |
margin: 0 auto; | |
font-family: "Helvetica Neue", sans-serif; | |
font-size: 12px; | |
height: 35px; | |
width: 250px; | |
} | |
</style> | |
<body> | |
<script src="//d3js.org/d3.v3.min.js" charset="utf-8"></script> | |
<script src="//d3js.org/queue.v1.min.js"></script> | |
<script src="//d3js.org/topojson.v1.min.js"></script> | |
<script src="//cdnjs.cloudflare.com/ajax/libs/d3-legend/1.10.0/d3-legend.min.js"></script> | |
<script> | |
var color = d3.scale.linear() | |
.domain([0, .02, .05, .15]) | |
.range(["rgb(247,251,255)", "rgb(198,219,239)", "rgb(33,113,181)", "rgb(8,48,107)"]) | |
var rateByName = d3.map(); | |
var width = 960, | |
height = 1160; | |
var projection = d3.geo.mercator() | |
.center([-10, 30]) | |
.scale(1800) | |
.translate([width / 2, height / 2]); | |
var path = d3.geo.path() | |
.projection(projection) | |
.pointRadius(2); | |
d3.select("body").append("svg") | |
.attr("class", "legend") | |
var legend = d3.legend.color() | |
.shapeHeight(10) | |
.shapeWidth(50) | |
.shapePadding(0) | |
.labelOffset(5) | |
.labelFormat(d3.format("%")) | |
.orient("horizontal") | |
.labelAlign("start") | |
.scale(color) | |
d3.select(".legend") | |
.call(legend) | |
var svg = d3.select("body").append("svg") | |
.attr("width", width) | |
.attr("height", height); | |
// Define the div for the tooltip | |
var div = d3.select("body").append("div") | |
.attr("class", "tooltip") | |
.style("opacity", 0); | |
queue() | |
.defer(d3.json, "spain.json") | |
.defer(d3.tsv, "spain-provinces-population.tsv", function(d) { | |
// console.log(d.Nombre + " " + d['Porcentaje_Población']) | |
rateByName.set(d.Nombre, +d['Porcentaje_Población']); | |
}) | |
.await(ready); | |
function ready(error, spain){ | |
// console.log(map) | |
var quantize = d3.scale.quantize() | |
.domain([0, 5]) | |
.range(d3.range(9).map(function(i) { return "q" + i + "-9"; })); | |
svg.selectAll(".subunit") | |
.data(topojson.feature(spain, spain.objects.subunits).features) | |
.enter().append("path") | |
.attr("class", function(d) { | |
return "subunit " + d.properties.name; }) | |
.attr("class", function(d) { return quantize(rateByName.get(d.properties.name)); }) | |
.attr("d", path) | |
.on("mouseover", function(d) { | |
console.log(d.properties.name) | |
div.transition() | |
.duration(200) | |
.style("opacity", .9); | |
div .html(d.properties.name) | |
.style("left", (d3.event.pageX) + "px") | |
.style("top", (d3.event.pageY - 28) + "px"); | |
}) | |
.on("mouseout", function(d) { | |
div.transition() | |
.duration(500) | |
.style("opacity", 0); | |
}); | |
svg.append("path") | |
.datum(topojson.mesh(spain, spain.objects.subunits, function(a, b) { return a !== b; })) | |
.attr("d", path) | |
.attr("class", "subunit-boundary"); | |
svg.append("path") | |
.datum(topojson.feature(spain, spain.objects.places)) | |
.attr("d", path) | |
.attr("class", "place"); | |
svg.selectAll(".place-label") | |
.data(topojson.feature(spain, spain.objects.places).features) | |
.enter().append("text") | |
.attr("class", "place-label") | |
.attr("transform", function(d) { | |
return "translate(" + projection(d.geometry.coordinates) + ")"; }) | |
.attr("x", function(d) { return d.geometry.coordinates[0] > -1 ? 6 : -6; }) | |
.attr("dy", ".15em") | |
.style("text-anchor", function(d) { return d.geometry.coordinates[0] > -1 ? "start" : "end"; }) | |
.text(function(d) { | |
// debugger | |
// console.log(d.properties.NAME + " " + d.properties.POP_MAX) | |
return d.properties.NAME; }); | |
}; | |
</script> |
Nombre Población Porcentaje_Población Densidad Superficie Porcentaje_superficie Comunidad_Autónoma | |
Álava 321932 0.69 106 3037 0.6 País Vasco | |
Albacete 395007 0.85 26.46 14926 2.96 Castilla-La Mancha | |
Alicante 1 842963 3.97 316.82 5817 1.15 Comunidad Valenciana | |
Almería 690851 1.49 78.73 8775 1.74 Andalucía | |
Asturias 1041754 2.22 98.25 10603 2.10 Asturias | |
Ávila 165786 0.36 20.59 8050 1.60 Castilla y León | |
Badajoz 686032 1.48 31.52 21766 4.31 Extremadura | |
Barcelona 5427322 11.69 701.84 7733 1.53 Cataluña | |
Burgos 366900 0.78 26.17 14022 2.77 Castilla y León | |
Cáceres 405560 0.87 20.41 19868 3.94 Extremadura | |
Cádiz 1 248625 2.69 167.82 7440 1.47 Andalucía | |
Cantabria 588656 1.26 110.63 5321 1.05 Cantabria | |
Castellón 574906 1.24 86.63 6636 1.31 Comunidad Valenciana | |
Ciudad Real 514543 1.11 25.97 19813 3.93 Castilla-La Mancha | |
Córdoba 795718 1.71 57.78 13771 2.73 Andalucía | |
La Coruña 1128807 2.43 141.99 7950 1.58 Galicia | |
Cuenca 206653 0.44 12.06 17140 3.40 Castilla-La Mancha | |
Gerona 740537 1.59 125.32 5909 1.17 Cataluña | |
Granada 919329 1.98 72.69 12646 2.51 Andalucía | |
Guadalajara 254388 0.55 20.83 12214 2.41 Castilla-La Mancha | |
Gipuzkoa 707298 1.52 354.18 1997 0.39 País Vasco | |
Huelva 522216 1.12 51.57 10127 2.01 Andalucía | |
Huesca 221942 0.48 14.19 15636 3.10 Aragón | |
Baleares 1124 744 2.42 225.35 4991 0.99 Islas Baleares | |
Jaén 652253 1.40 48.33 13496 2.67 Andalucía | |
León 480209 1.03 30.82 15580 3.09 Castilla y León | |
Lérida 430655 0.93 35.38 12172 2.41 Cataluña | |
Lugo 338873 0.73 34.38 9856 1.95 Galicia | |
Madrid 6377364 13.73 794.48 8027 1.59 Comunidad de Madrid | |
Málaga 1632949 3.52 223.51 7306 1.45 Andalucía | |
Murcia 1463249 3.15 129.34 11313 2.24 Región de Murcia | |
Navarra 636638 1.37 61.27 10391 2.05 Navarra | |
Orense 318739 0.69 43.82 7273 1.44 Galicia | |
Palencia 165782 0.36 20.59 8052 1.60 Castilla y León | |
Las Palmas 1106779 2.38 272.27 4065 0.81 Canarias | |
Pontevedra 948496 2.04 211.09 4494 0.89 Galicia | |
La Rioja 319002 0.68 62.16 5045 0.99 La Rioja | |
Salamanca 342045 0.74 27.70 12349 2.45 Castilla y León | |
Santa Cruz de Tenerife 1021868 2.20 302.24 3381 0.67 Canarias | |
Segovia 158085 0.34 22.84 6920 1.35 Castilla y León | |
Sevilla 1939625 4.17 138.19 14036 2.78 Andalucía | |
Soria 92221 0.2 111.77 10306 2.04 Castilla y León | |
Tarragona 792619 1.71 125.77 6302 1.25 Cataluña | |
Teruel 137838 0.30 9.31 14809 2.96 Aragón | |
Toledo 699136 1.49 45.49 15369 3.04 Castilla-La Mancha | |
Valencia 2521681 5.43 233.34 10807 2.14 Comunidad Valenciana | |
Valladolid 527508 1.14 65.04 8110 1.61 Castilla y León | |
Bizkaia 1151905 2.46 519.58 2217 0.44 País Vasco | |
Zamora 184238 0.40 17.45 10561 2.09 Castilla y León | |
Zaragoza 960111 2.05 55.58 17274 3.41 Aragón | |
Ceuta 84726 0.18 4 579.78 18.5 Ceuta | |
Melilla 84621 0.18 6 315.00 13.4 Melilla |