var usgs_dir = 'http://earthquake.usgs.gov/earthquakes/dyfi/events/nc/' , usgs_evt = '71676251' // 2011-11-05 3.2 quake near Piedmont, CA, USA , usgs_csv = '/us/cdi_zip.txt' , usgs_url = usgs_dir + usgs_evt + usgs_csv ; var path = d3.geo.path() .projection(d3.geo.albersUsa() .scale(1400) .translate([680, 360])); var svg = d3.select("#body").append("svg:svg") .attr("class", "YlOrRd") .attr("width", 960) .attr("height", 500) .append('svg:g') .attr("transform", "scale(1.9) translate(-100 -198)") ; var zipcodes = svg.append("svg:g") .attr("id", "ca-zipcodes"); var states = svg.append("svg:g") .attr("id", "states"); load_csv(usgs_url, show, { header_cb: parse_header, line_cb: parse_line }); function parse_header(name, n) { return ({ '# Columns: ZIP/Location': 'zip' , 'CDI': 'cdi' , 'No. of responses': 'responses' , 'Epicentral distance': 'dist' , 'Latitude': 'lat' , 'Longitude': 'lng' , 'Suspect?': 'suspect' , 'City': 'city' , 'State': 'state' })[name]; } function parse_line(val, n) { return ([ String // zip , String // cdi , Number // responses , Number // dist , Number // lat , Number // lng , Number // suspect , String // city , String // state ])[n](val); } function show(csv) { function sum(arr) { return d3.sum(arr, function(d){ return d.responses; }); } function padded_zip(d) { return pad(d.zip); } var pad = d3.format("05d") , data = d3.nest().key(padded_zip).rollup(sum).map(csv) , max = d3.max(d3.values(data)) , quantize = d3.scale.linear().domain([0, max]).rangeRound([0, 8]); window.data = data; // for ease of inspection d3.json("zips-ca.json", function(json) { zipcodes.selectAll("path") .data(json.features) .enter().append("svg:path") .attr("class", function(d) { return "q" + quantize(data[pad(d.id)] || 0) + "-9"; }) .attr("d", path) .append("svg:title") .text(function(d) { var no = data[pad(d.id)] || 0; return d.id + ": " + no + " responses"; }); }); } d3.json("us-ca.json", function(json) { states.selectAll("path") .data(json.features) .enter().append("svg:path") .attr("d", path); }); d3.select("select").on("change", function() { d3.selectAll("svg").attr("class", this.value); });