D3
OG
Old school D3 from simpler times
All examples
By author
By category
About
Lichtphyz
Full window
Github gist
Beer vs Wine - US
Built with
blockbuilder.org
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <script src="https://d3js.org/d3.v4.min.js"></script> <style type="text/css"> /* Legend Font Style */ body { font: 12px sans-serif; background-color: #ffffff; } /* Legend Position Style */ .legend { position:absolute; left:20px; top:40px; } .axis text { font: 10px sans-serif; } .axis line, .axis path { fill: none; stroke: #000; shape-rendering: crispEdges; } </style> </head> <body> <script type="text/javascript"> //Width and height of map var width = 960; var height = 500; var lowColor = '#bb2a44' var highColor = '#c5bc39' // D3 Projection var projection = d3.geoAlbersUsa() .translate([width / 2, height / 2]) // translate to center of screen .scale([1000]); // scale things down so see entire US // Define path generator var path = d3.geoPath() // path generator that will convert GeoJSON to SVG paths .projection(projection); // tell path generator to use albersUsa projection //Create SVG element and append map to the SVG var svg = d3.select("body") .append("svg") .attr("width", width) .attr("height", height); // Load in my states data! d3.csv("beerwine.csv", function(data) { var dataArray = []; for (var d = 0; d < data.length; d++) { dataArray.push(parseFloat(data[d].value)) } var minVal = d3.min(dataArray) var maxVal = d3.max(dataArray) var ramp = d3.scaleLinear().domain([minVal,maxVal]).range([lowColor,highColor]) // Load GeoJSON data and merge with states data d3.json("us-states.json", function(json) { // Loop through each state data value in the .csv file for (var i = 0; i < data.length; i++) { // Grab State Name var dataState = data[i].state; // Grab data value var dataValue = data[i].value; // Find the corresponding state inside the GeoJSON for (var j = 0; j < json.features.length; j++) { var jsonState = json.features[j].properties.name; if (dataState == jsonState) { // Copy the data value into the JSON json.features[j].properties.value = dataValue; // Stop looking through the JSON break; } } } // Bind the data to the SVG and create one path per GeoJSON feature svg.selectAll("path") .data(json.features) .enter() .append("path") .attr("d", path) .style("stroke", "#fff") .style("stroke-width", "1") .style("fill", function(d) { return ramp(d.properties.value) }); // add a legend var w = 140, h = 300; var key = d3.select("body") .append("svg") .attr("width", w) .attr("height", h) .attr("class", "legend"); var legend = key.append("defs") .append("svg:linearGradient") .attr("id", "gradient") .attr("x1", "100%") .attr("y1", "0%") .attr("x2", "100%") .attr("y2", "100%") .attr("spreadMethod", "pad"); legend.append("stop") .attr("offset", "0%") .attr("stop-color", highColor) .attr("stop-opacity", 1); legend.append("stop") .attr("offset", "100%") .attr("stop-color", lowColor) .attr("stop-opacity", 1); key.append("rect") .attr("width", w - 100) .attr("height", h) .style("fill", "url(#gradient)") .attr("transform", "translate(0,10)"); var y = d3.scaleLinear() .range([h, 0]) .domain([minVal, maxVal]); var yAxis = d3.axisRight(y); key.append("g") .attr("class", "y axis") .attr("transform", "translate(41,10)") .call(yAxis) }); }); </script> </body> </html>
https://d3js.org/d3.v4.min.js