Skip to content

Instantly share code, notes, and snippets.

@jrzief
Last active September 9, 2019 19:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jrzief/253ddd359b9c58b8cce1fd71eb11294e to your computer and use it in GitHub Desktop.
Save jrzief/253ddd359b9c58b8cce1fd71eb11294e to your computer and use it in GitHub Desktop.
Multi-Line Voronoi -colors-CNJ commuters
license: gpl-3.0
origin Trenton OldenAve WhiteheadRd Lawrence-295 Quakerbridge MeadowRd CarnegieCenter AlexanderRD WashingtonRd HarrisonRd Plainsboro-ScuddersMill Plainsboro-CollegeRd RaymondRD RidgeRd PromenadeBlvd SBrunswick-AutumnDr NewRd SandHillRd HendersonRd FinnegansLane AdamsLane NBrunswick-JerseyAve LivingstonAve Rte130 RydersLane NBrunswick-Rte18
Ewing Twp 0 0 0 563.4 563.4 563.4 563.4 563.4 563.4 554.6 554.6 345.6 345.6 345.6 345.6 220.8 220.8 220.8 160.8 160.8 160.8 160.8 160.8 160.8 126.4 0
Hamilton Twp 0 0 0 1519.4 1695.9 1695.9 1695.9 1695.9 1695.9 1695.9 1695.9 1255.5 1255.5 1188.9 1188.9 609.3 609.3 609.3 428.4 428.4 428.4 428.4 428.4 428.4 286.2 0
Hillsborough Twp 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 66 66 66 0 0 0
Hopewell Twp 0 0 0 150.35 150.35 91.35 91.35 91.35 91.35 91.35 91.35 47.25 47.25 47.25 47.25 14.25 14.25 14.25 14.25 14.25 14.25 14.25 14.25 14.25 14.25 0
Lawrence Twp 0 0 53.5 1373.2 1319.7 1193.8 1193.8 1193.8 1193.8 1091.6 1091.6 545.8 545.8 545.8 545.8 182.8 182.8 182.8 86 86 86 86 86 86 86 0
Pennington Boro 0 0 0 67.65 74.3 26.8 26.8 50.2 50.2 50.2 50.2 15.1 15.1 15.1 15.1 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 0
Plainsboro Twp 0 0 0 0 0 0 0 0 0 0 0 0 265.2 265.2 265.2 265.2 265.2 265.2 239.4 239.4 239.4 239.4 239.4 239.4 239.4 0
Princeton 0 0 0 0 0 0 0 124.82 239.04 373.1 373.1 42.4 42.4 42.4 42.4 312 312 312 312 312 312 312 312 312 214 0
Trenton City 5064.55 5064.55 1967.05 1844.15 1844.15 786.05 786.05 786.05 786.05 771.95 771.95 542.95 542.95 469.75 469.75 469.75 108.75 108.75 90 90 90 90 90 90 90 0
West Windsor Township 0 0 0 0 0 0 0 0 486 486 486 486 486 486 486 378 378 378 246 246 246 246 246 246 156 0
<!DOCTYPE html>
<meta charset="utf-8">
<style>
.axis--y path {
display: none;
}
.sites {
fill: none;
stroke-linejoin: round;
stroke-linecap: round;
stroke-width: 1.5px;
}
.focus text {
text-anchor: middle;
text-shadow: 0 1px 0 #fff, 1px 0 0 #fff, 0 -1px 0 #fff, -1px 0 0 #fff;
}
.voronoi path {
fill: none;
pointer-events: all;
}
.voronoi--show path {
stroke: red;
stroke-opacity: 0.2;
}
#form {
position: absolute;
top: 20px;
right: 30px;
}
</style>
<svg width="1160" height="600"></svg>
<label id="form" for="show-voronoi">
Show Voronoi
<input type="checkbox" id="show-voronoi" disabled>
</label>
<script src="https://d3js.org/d3.v4.min.js"></script>
<script>
var months,
monthKeys,
monthParse = d3.timeParse("%Y-%m");
var steps,
stepKeys;
var svg = d3.select("svg"),
margin = {top: 20, right: 30, bottom: 110, left: 40},
width = svg.attr("width") - margin.left - margin.right,
height = svg.attr("height") - margin.top - margin.bottom,
g = svg.append("g").attr("transform", "translate(" + margin.left + "," + margin.top + ")");
var xScale = d3.scaleBand()
.rangeRound([0, width])
.paddingInner(0.9);
var yScale = d3.scaleLinear()
.range([height, 0]);
var zScale = d3.scaleOrdinal(d3.schemeCategory10);
var voronoi = d3.voronoi()
.x(function(d) { return xScale(d.step); })
.y(function(d) { return yScale(d.value); })
.extent([[-margin.left, -margin.top], [width + margin.right, height + margin.bottom]]);
var line = d3.line()
.x(function(d) { return xScale(d.step); })
.y(function(d) { return yScale(d.value); })
.curve(d3.curveMonotoneX);
d3.csv("datanorth2_fullset.csv", type, function(error, data) {
if (error) throw error;
xScale.domain(data.columns.slice(1));
yScale.domain([0, 5500]);
//x.domain(d3.extent(months));
//y.domain([0, d3.max(data, function(c) { return d3.max(c.values, function(d) { return //d.value; }); })]).nice();
zScale.domain(data.map(function(d) { return d.origin; }))
var xAxis = d3.axisBottom(xScale);
var xAxisDraw = g.append("g")
.attr("class", "axis axis--x")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);
xAxisDraw
// .call(xAxis)
.selectAll("text")
.style("text-anchor", "end")
.attr("dx", "-.8em")
.attr("dy", ".15em")
.attr("transform", function(d) {
return "rotate(-65)"
});
// g.append("g")
// .attr("class", "axis axis--x")
// .attr("transform", "translate(0," + height + ")")
// .call(d3.axisBottom(xScale));
g.append("g")
.attr("class", "axis axis--y")
.call(d3.axisLeft(yScale).ticks(10))
.append("text")
.attr("x", 4)
.attr("y", 0.5)
.attr("dy", "0.32em")
.style("text-anchor", "start")
.style("fill", "#000")
.style("font-weight", "bold")
.text("Commuters");
g.append("g")
.attr("class", "sites")
.selectAll("path")
.data(data)
.enter().append("path")
.attr("d", function(d) { d.line = this; return line(d.values); })
.style("stroke", function(d) { return zScale(d.origin); });
var focus = g.append("g")
.attr("transform", "translate(-100,-100)")
.attr("class", "focus");
focus.append("circle")
.attr("r", 3.5);
focus.append("text")
.attr("y", -10);
var voronoiGroup = g.append("g")
.attr("class", "voronoi");
voronoiGroup.selectAll("path")
.data(voronoi.polygons(d3.merge(data.map(function(d) { return d.values; }))))
.enter().append("path")
.attr("d", function(d) { return d ? "M" + d.join("L") + "Z" : null; })
.on("mouseover", mouseover)
.on("mouseout", mouseout);
// data.map(function(d) { return console.log(d)})
// console.log(data)
// console.log(data.map(function(d) { return d.values; }))
d3.select("#show-voronoi")
.property("disabled", false)
.on("change", function() { voronoiGroup.classed("voronoi--show", this.checked); });
function mouseover(d) {
d3.select(d.data.site.line)
.style('stroke-width', 3)
.style('stroke', d3.hsl(zScale(d.data.site.origin)).brighter(1));
d.data.site.line.parentNode.appendChild(d.data.site.line);
focus.attr("transform", "translate(" + xScale(d.data.step) + "," + yScale(d.data.value) + ")");
focus.select("text").text(d.data.site.origin + ': ' + d.data.value);
}
function mouseout(d) {
d3.select(d.data.site.line)
.style("stroke-width", 1.5)
.style('stroke', zScale(d.data.site.origin));
focus.attr("transform", "translate(-100,-100)");
}
});
// function type(d, i, columns) {
// if (!months) monthKeys = columns.slice(1), months = monthKeys.map(monthParse);
// var c = {name: d.name.replace(/ (msa|necta div|met necta|met div)$/i, ""), values:
// null};
// c.values = monthKeys.map(function(k, i) { return {city: c, date: months[i], value: //d[k] / 100}; });
// return c;
// }
function type(d, i, columns) {
stepKeys = columns.slice(1); // steps = stepKeys; //.map();
var c = {origin: d.origin, values: null};
c.values = stepKeys.map(function(k, i) { return {site: c, step: stepKeys[i], value: d[k]}; });
return c;
}
</script>
GENERATED_FILES = \
unemployment.tsv
.PHONY: all clean
all: $(GENERATED_FILES)
clean:
rm -rf -- $(GENERATED_FILES)
# http://www.bls.gov/lau/metrossa.htm
build/ssamatab2.txt:
mkdir -p build
curl -o $@ 'http://www.bls.gov/lau/ssamatab2.txt'
unemployment.tsv: process-data build/ssamatab2.txt
./process-data build/ssamatab2.txt > $@
{
"name": "anonymous",
"version": "0.0.1",
"private": true,
"devDependencies": {
"d3": "3"
}
}
#!/usr/bin/env node
var fs = require("fs"),
d3 = require("d3");
// Parse lines.
var lines = fs.readFileSync(process.argv[2], "utf8").split(/[\r\n]+/);
// Parse fixed-width columns.
var data = lines.filter(function(d, i) {
return i >= 3 && i <= lines.length - 4;
}).map(function(line) {
var fields = line.split(/\s{2,}/), i = -1;
return {
"LAUS Code": fields[++i],
"State FIPS Code": fields[++i],
"Area FIPS Code": fields[++i],
"Area": fields[++i],
"Year": fields[++i],
"Month": fields[++i],
"Civilian Labor Force": +fields[++i].replace(/,/g, ""),
"Employment": +fields[++i].replace(/,/g, ""),
"Unemployment": +fields[++i].replace(/,/g, ""),
"Unemployment Rate": +fields[++i]
};
});
// Extract the available dates.
var dates = d3.set(data.map(function(d) { return d["Year"] + "-" + d["Month"]; })).values().sort();
// Nest unemployment rate by area and date.
var rateByNameAndDate = d3.nest()
.key(function(d) { return d["Area"]; })
.key(function(d) { return d["Year"] + "-" + d["Month"]; })
.rollup(function(v) { return v[0]["Unemployment Rate"]; }) // leaf nest is unique
.map(data, d3.map);
// Recast data into a wide table.
var rows = rateByNameAndDate.entries().sort(function(a, b) { return d3.ascending(a.key, b.key); }).map(function(area) {
return [area.key].concat(dates.map(function(d) {
return area.value.get(d);
}));
});
process.stdout.write(d3.tsv.formatRows([["name"].concat(dates)].concat(rows)));
origin Trenton OldenAve WhiteheadRd Lawrence-295 Quakerbridge MeadowRd CarnegieCenter AlexanderRD WashingtonRd HarrisonRd Plainsboro-ScuddersMill Plainsboro-CollegeRd RaymondRD RidgeRd PromenadeBlvd
Ewing Twp 0 0 0 563.4 563.4 563.4 563.4 563.4 563.4 554.6 554.6 345.6 345.6 345.6 345.6
Hamilton Twp 0 0 0 1519.4 1695.9 1695.9 1695.9 1695.9 1695.9 1695.9 1695.9 1255.5 1255.5 1188.9 1188.9
Hopewell Twp 0 0 0 150.35 150.35 91.35 91.35 91.35 91.35 91.35 91.35 47.25 47.25 47.25 47.25
Lawrence Twp 0 0 53.5 1373.2 1319.7 1193.8 1193.8 1193.8 1193.8 1091.6 1091.6 545.8 545.8 545.8 545.8
Princeton 0 0 0 0 0 0 0 124.82 239.04 373.1 373.1 42.4 42.4 42.4 42.4
Trenton City 5064.55 5064.55 1967.05 1844.15 1844.15 786.05 786.05 786.05 786.05 771.95 771.95 542.95 542.95 469.75 469.75
name 2000-01 2000-02 2000-03 2000-04 2000-05 2000-06 2000-07 2000-08 2000-09 2000-10 2000-11 2000-12 2001-01 2001-02 2001-03 2001-04 2001-05 2001-06 2001-07 2001-08 2001-09 2001-10 2001-11 2001-12 2002-01 2002-02 2002-03 2002-04 2002-05 2002-06 2002-07 2002-08 2002-09 2002-10 2002-11 2002-12 2003-01 2003-02 2003-03 2003-04 2003-05 2003-06 2003-07 2003-08 2003-09 2003-10 2003-11 2003-12 2004-01 2004-02 2004-03 2004-04 2004-05 2004-06 2004-07 2004-08 2004-09 2004-10 2004-11 2004-12 2005-01 2005-02 2005-03 2005-04 2005-05 2005-06 2005-07 2005-08 2005-09 2005-10 2005-11 2005-12 2006-01 2006-02 2006-03 2006-04 2006-05 2006-06 2006-07 2006-08 2006-09 2006-10 2006-11 2006-12 2007-01 2007-02 2007-03 2007-04 2007-05 2007-06 2007-07 2007-08 2007-09 2007-10 2007-11 2007-12 2008-01 2008-02 2008-03 2008-04 2008-05 2008-06 2008-07 2008-08 2008-09 2008-10 2008-11 2008-12 2009-01 2009-02 2009-03 2009-04 2009-05 2009-06 2009-07 2009-08 2009-09 2009-10 2009-11 2009-12 2010-01 2010-02 2010-03 2010-04 2010-05 2010-06 2010-07 2010-08 2010-09 2010-10 2010-11 2010-12 2011-01 2011-02 2011-03 2011-04 2011-05 2011-06 2011-07 2011-08 2011-09 2011-10 2011-11 2011-12 2012-01 2012-02 2012-03 2012-04 2012-05 2012-06 2012-07 2012-08 2012-09 2012-10 2012-11 2012-12 2013-01 2013-02 2013-03 2013-04 2013-05 2013-06 2013-07 2013-08 2013-09 2013-10
Bethesda-Rockville-Frederick, MD Met Div 2.6 2.6 2.6 2.6 2.7 2.7 2.7 2.6 2.6 2.6 2.6 2.6 2.7 2.7 2.8 2.8 2.9 3 3.1 3.3 3.4 3.5 3.5 3.6 3.6 3.6 3.6 3.6 3.6 3.5 3.5 3.4 3.4 3.4 3.4 3.4 3.4 3.4 3.4 3.4 3.4 3.4 3.4 3.3 3.3 3.3 3.3 3.3 3.2 3.2 3.2 3.2 3.2 3.2 3.2 3.2 3.2 3.2 3.2 3.3 3.3 3.3 3.3 3.2 3.2 3.1 3.1 3 3 3 2.9 2.9 2.8 2.8 2.8 2.8 2.9 3 3 3 2.9 2.9 2.9 2.9 2.8 2.8 2.7 2.7 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.5 2.5 2.6 2.7 2.8 2.9 3.1 3.2 3.4 3.6 3.9 4.2 4.5 4.9 5.2 5.5 5.7 5.8 5.9 6 6 6.1 6.2 6.2 6.3 6.3 6.3 6.2 6.1 6 5.9 5.9 5.9 5.9 5.9 5.8 5.8 5.7 5.6 5.5 5.5 5.5 5.6 5.6 5.6 5.6 5.5 5.4 5.4 5.3 5.3 5.3 5.3 5.3 5.3 5.3 5.3 5.2 5.2 5.2 5.2 5.2 5.2 5.1 5.2 5.3 5.5 5.5 5.3 5.2 5.2
Boston-Cambridge-Quincy, MA NECTA Div 2.7 2.6 2.6 2.5 2.4 2.4 2.3 2.3 2.3 2.3 2.3 2.4 2.5 2.6 2.8 2.9 3 3.2 3.4 3.6 3.8 4 4.2 4.4 4.6 4.7 4.8 4.9 4.9 5 5 5 5.1 5.1 5.2 5.2 5.3 5.3 5.4 5.4 5.5 5.6 5.6 5.6 5.5 5.4 5.3 5.2 5.1 5.1 5 4.9 4.9 4.8 4.7 4.6 4.5 4.5 4.4 4.4 4.4 4.4 4.4 4.3 4.3 4.2 4.2 4.3 4.3 4.3 4.3 4.3 4.3 4.3 4.3 4.3 4.3 4.3 4.3 4.2 4.2 4.2 4.2 4.1 4.1 4.1 4 4 3.9 3.9 3.9 3.9 3.9 3.9 3.9 3.9 3.9 4 4.1 4.2 4.3 4.5 4.7 4.8 5 5.3 5.6 5.9 6.2 6.5 6.7 6.9 7.1 7.3 7.4 7.5 7.6 7.6 7.6 7.6 7.6 7.5 7.5 7.4 7.3 7.2 7.1 7 7 6.9 6.9 6.8 6.6 6.5 6.4 6.3 6.3 6.2 6.2 6.1 6.1 6 5.9 5.8 5.7 5.7 5.6 5.6 5.6 5.6 5.6 5.6 5.6 5.6 5.6 5.6 5.6 5.5 5.4 5.5 5.6 5.9 6 6 5.9 6
Boston-Cambridge-Quincy, MA-NH Met NECTA 2.8 2.7 2.7 2.6 2.6 2.5 2.5 2.5 2.4 2.4 2.5 2.5 2.6 2.8 2.9 3.1 3.2 3.4 3.6 3.8 4.1 4.3 4.5 4.7 4.9 5 5.1 5.2 5.2 5.3 5.3 5.4 5.4 5.5 5.5 5.5 5.6 5.6 5.6 5.7 5.8 5.8 5.9 5.8 5.8 5.7 5.6 5.5 5.4 5.3 5.2 5.2 5.1 5 4.9 4.9 4.8 4.7 4.7 4.6 4.6 4.6 4.6 4.5 4.5 4.4 4.4 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.4 4.4 4.4 4.4 4.4 4.3 4.3 4.2 4.2 4.2 4.1 4.1 4.1 4.1 4.1 4.1 4.1 4.1 4.1 4.2 4.3 4.4 4.5 4.7 4.9 5.1 5.3 5.5 5.8 6.1 6.5 6.8 7.1 7.3 7.5 7.7 7.8 7.9 8 8 8 8 8 7.9 7.9 7.8 7.6 7.5 7.4 7.3 7.3 7.2 7.2 7.1 6.9 6.8 6.8 6.7 6.6 6.6 6.6 6.5 6.5 6.4 6.3 6.2 6.1 6.1 6.1 6 6 6.1 6.1 6.1 6.1 6.1 6.1 6.1 6.1 5.9 5.9 5.9 6 6.3 6.3 6.3 6.2 6.3
Brockton-Bridgewater-Easton, MA NECTA Div 3 3 2.9 2.9 2.8 2.8 2.8 2.8 2.8 2.8 2.9 2.9 3.1 3.2 3.3 3.4 3.5 3.6 3.8 3.9 4.1 4.3 4.4 4.6 4.8 4.9 5 5.1 5.2 5.3 5.3 5.4 5.4 5.5 5.6 5.6 5.7 5.8 5.9 6 6.1 6.2 6.2 6.3 6.2 6.2 6.1 6.1 6 5.9 5.9 5.9 5.8 5.7 5.7 5.6 5.5 5.5 5.4 5.4 5.4 5.3 5.3 5.3 5.2 5.2 5.2 5.3 5.3 5.4 5.3 5.3 5.3 5.2 5.2 5.3 5.3 5.3 5.4 5.3 5.3 5.3 5.3 5.2 5.2 5.1 5.1 5.1 5 5 5 5 5 5.1 5.1 5.1 5.2 5.2 5.3 5.4 5.6 5.8 6 6.2 6.5 6.8 7.1 7.5 7.9 8.2 8.5 8.7 8.9 9.1 9.3 9.5 9.6 9.7 9.8 9.9 9.9 9.9 9.9 9.8 9.6 9.5 9.4 9.4 9.3 9.3 9.2 9.1 9 8.8 8.7 8.6 8.5 8.5 8.4 8.4 8.3 8.2 8.1 7.9 7.8 7.7 7.7 7.7 7.7 7.7 7.7 7.6 7.5 7.5 7.5 7.4 7.4 7.2 7.1 7.2 7.4 7.8 7.9 7.9 7.7 7.8
Camden, NJ Met Div 3.6 3.6 3.5 3.5 3.4 3.4 3.5 3.5 3.6 3.6 3.6 3.5 3.5 3.5 3.5 3.6 3.7 3.8 3.9 4.1 4.3 4.5 4.6 4.8 5 5.1 5.2 5.3 5.4 5.4 5.4 5.4 5.5 5.5 5.5 5.6 5.6 5.6 5.5 5.6 5.6 5.6 5.6 5.5 5.4 5.3 5.2 5.2 5.1 5.1 5 5 4.9 4.8 4.7 4.6 4.5 4.4 4.4 4.3 4.3 4.3 4.2 4.2 4.2 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.7 4.7 4.7 4.8 4.8 4.9 4.8 4.8 4.7 4.6 4.5 4.4 4.3 4.3 4.2 4.2 4.3 4.3 4.3 4.4 4.4 4.5 4.6 4.7 4.7 4.8 4.8 4.9 5.1 5.2 5.4 5.7 5.9 6.3 6.7 7.1 7.6 8 8.4 8.7 9 9.2 9.4 9.6 9.7 9.9 10 10.1 10.2 10.2 10.2 10.1 10 10 9.9 9.9 10 10 10 10 9.9 9.8 9.7 9.7 9.7 9.8 9.8 9.9 9.8 9.8 9.7 9.7 9.6 9.7 9.8 9.9 10 10 10.1 10.1 10.1 10.1 10.1 10.1 9.9 9.7 9.4 9.1 9 9 8.8 8.7 8.7 8.6
Chicago-Joliet-Naperville, IL Met Div 4.4 4.4 4.4 4.4 4.5 4.5 4.5 4.5 4.5 4.5 4.7 4.9 5.1 5.3 5.4 5.4 5.4 5.4 5.5 5.6 5.8 6 6.2 6.4 6.6 6.7 6.8 6.9 7 7 7 7 7 7 7 6.9 6.9 6.8 6.8 6.9 7 7.1 7.2 7.2 7.1 7 6.8 6.6 6.5 6.4 6.3 6.3 6.3 6.3 6.3 6.3 6.3 6.3 6.3 6.3 6.3 6.3 6.3 6.3 6.2 6.2 6.1 6 5.8 5.7 5.5 5.3 5.1 4.9 4.7 4.5 4.5 4.4 4.4 4.3 4.2 4.2 4.2 4.3 4.3 4.4 4.6 4.7 4.8 4.9 5 5.1 5.1 5.2 5.2 5.2 5.2 5.3 5.4 5.6 5.9 6.1 6.3 6.4 6.5 6.9 7.1 7.4 7.9 8.5 9.1 9.5 9.9 10.2 10.4 10.7 10.9 11.1 11.2 11.3 11.2 11.1 10.9 10.7 10.5 10.4 10.2 10.1 10 9.9 9.7 9.5 9.4 9.3 9.4 9.6 9.8 10.2 10.4 10.5 10.5 10.3 9.9 9.5 9.2 8.9 8.8 8.7 8.8 8.9 8.9 8.9 8.9 8.9 8.9 8.9 9 9.4 9.5 9.4 9.3 9.4 9.4 9.4 9.3 9.1
Chicago-Joliet-Naperville, IL-IN-WI MSA 4.1 4.2 4.2 4.2 4.3 4.3 4.3 4.4 4.4 4.5 4.6 4.7 4.9 5 5.1 5.1 5.2 5.2 5.3 5.5 5.7 5.9 6.1 6.3 6.5 6.6 6.7 6.7 6.8 6.8 6.8 6.8 6.8 6.8 6.8 6.7 6.7 6.7 6.6 6.7 6.8 6.9 7 7 6.9 6.8 6.7 6.5 6.4 6.3 6.2 6.2 6.2 6.2 6.2 6.2 6.2 6.2 6.2 6.2 6.2 6.2 6.1 6.1 6.1 6 5.9 5.8 5.8 5.6 5.5 5.3 5.1 4.9 4.7 4.6 4.5 4.4 4.4 4.4 4.4 4.4 4.4 4.4 4.5 4.6 4.6 4.7 4.7 4.8 4.9 5 5.1 5.2 5.3 5.3 5.3 5.3 5.4 5.6 5.8 6 6.2 6.3 6.5 6.8 7.1 7.6 8.1 8.7 9.2 9.7 10 10.2 10.3 10.5 10.7 10.9 11.1 11.3 11.3 11.3 11.1 10.9 10.6 10.4 10.2 10 9.9 9.8 9.7 9.6 9.5 9.4 9.5 9.6 9.8 10 10.2 10.2 10.1 10 9.7 9.5 9.2 9 8.9 8.8 8.8 8.8 8.8 8.8 8.8 8.8 8.8 8.8 9.1 9.6 9.7 9.6 9.4 9.4 9.3 9.2 9 8.8
Dallas-Fort Worth-Arlington, TX MSA 3.7 3.7 3.7 3.7 3.6 3.6 3.6 3.6 3.5 3.5 3.4 3.4 3.5 3.6 3.8 4 4.2 4.5 4.7 5 5.3 5.6 5.9 6.1 6.3 6.4 6.5 6.5 6.5 6.5 6.5 6.5 6.5 6.6 6.6 6.7 6.7 6.7 6.8 6.8 6.8 6.8 6.8 6.7 6.6 6.4 6.3 6.2 6.1 6.1 6 5.9 5.9 5.8 5.7 5.7 5.7 5.7 5.7 5.6 5.6 5.5 5.4 5.3 5.2 5.1 5.1 5.1 5.1 5.1 5 5 4.9 4.9 4.9 4.9 4.9 4.9 4.9 4.8 4.7 4.6 4.5 4.5 4.4 4.4 4.3 4.3 4.2 4.2 4.2 4.3 4.3 4.4 4.4 4.4 4.4 4.4 4.4 4.5 4.6 4.8 4.9 5.1 5.4 5.6 6 6.3 6.6 6.9 7.2 7.4 7.6 7.8 8 8.1 8.2 8.2 8.3 8.3 8.3 8.3 8.3 8.3 8.2 8.1 8.1 8.1 8.1 8.2 8.2 8.2 8.1 8 8 7.9 7.9 7.9 7.9 7.9 7.8 7.6 7.4 7.3 7.1 7 7 6.9 6.9 6.8 6.7 6.6 6.4 6.3 6.2 6.1 6.2 6.2 6.3 6.3 6.4 6.3 6.2 6 6 6
Dallas-Plano-Irving, TX Met Div 3.7 3.7 3.7 3.7 3.6 3.6 3.6 3.6 3.5 3.5 3.4 3.4 3.5 3.6 3.8 4.1 4.3 4.6 4.9 5.2 5.5 5.9 6.2 6.4 6.5 6.7 6.7 6.7 6.8 6.8 6.7 6.7 6.7 6.8 6.8 6.9 6.9 6.9 7 7 7 7 6.9 6.9 6.7 6.6 6.4 6.3 6.3 6.2 6.1 6.1 6 5.9 5.9 5.8 5.8 5.8 5.8 5.7 5.6 5.6 5.4 5.3 5.2 5.2 5.1 5.1 5.1 5.1 5.1 5.1 5 5 5 5 5 5 4.9 4.8 4.7 4.6 4.5 4.4 4.4 4.3 4.3 4.3 4.2 4.2 4.3 4.3 4.4 4.4 4.4 4.4 4.5 4.5 4.5 4.6 4.7 4.8 5 5.2 5.5 5.7 6.1 6.4 6.7 7 7.2 7.5 7.7 7.9 8 8.1 8.2 8.2 8.2 8.3 8.3 8.3 8.3 8.3 8.2 8.1 8.1 8.1 8.1 8.1 8.2 8.1 8.1 8 8 8 8 8 8 7.9 7.8 7.7 7.5 7.3 7.2 7.1 7.1 7 7 6.9 6.8 6.6 6.5 6.3 6.2 6.1 6.2 6.3 6.3 6.3 6.4 6.4 6.2 6.1 6 6
Detroit-Livonia-Dearborn, MI Met Div 4.1 4.1 4.2 4.2 4.3 4.3 4.3 4.3 4.4 4.5 4.7 5 5.3 5.6 5.7 5.7 5.7 5.7 5.8 6 6.3 6.7 7 7.2 7.3 7.3 7.3 7.3 7.2 7.2 7.1 7.1 7.1 7.3 7.5 7.8 8.1 8.4 8.6 8.7 8.8 8.8 8.7 8.7 8.6 8.4 8.3 8.2 8.1 8.1 8.2 8.3 8.4 8.5 8.7 8.8 9 9.1 9.1 9.1 9.1 9 8.9 8.8 8.7 8.6 8.5 8.4 8.4 8.5 8.5 8.4 8.3 8.2 8.2 8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.6 8.5 8.4 8.3 8.3 8.3 8.4 8.6 8.7 8.9 9 9 8.9 8.8 8.7 8.6 8.7 8.8 9.1 9.4 9.7 10 10.5 11.1 11.9 12.7 13.7 14.5 15.3 15.9 16.3 16.7 16.9 17 16.9 16.7 16.6 16.4 16.2 16 15.7 15.4 15.1 14.8 14.5 14.3 14.1 14 13.7 13.5 13.2 13 12.9 12.9 12.9 12.9 12.8 12.7 12.4 12.2 11.9 11.7 11.5 11.4 11.4 11.4 11.5 11.6 11.7 11.7 11.8 11.8 11.9 12 12 11.8 11.4 11 10.7 10.7 10.5 10.5 10.5 10.4
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment