block by jeremycflin cec1610c65fa4e2a6b5146fedaaf06fc

Multi-Line Voronoi with colors

Full Screen

This multi-line chart uses an invisible Voronoi tessellation to handle mouseover; the closest point to the mouse on any line is highlighted. Click the checkbox in the top-right to toggle the visibility of the Voronoi overlay.

forked from mbostock‘s block: Multi-Line Voronoi

forked from juanprq‘s block: Multi-Line Voronoi with colors

index.html

<!DOCTYPE html>
<meta charset="utf-8">
<style>

.axis--y path {
  display: none;
}

.cities {
  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="960" height="500"></svg>
<label id="form" for="show-voronoi">
  Show Voronoi
  <input type="checkbox" id="show-voronoi" disabled>
</label>
<script src="//d3js.org/d3.v4.min.js"></script>
<script>

var months,
    monthKeys,
    monthParse = d3.timeParse("%Y-%m");

var svg = d3.select("svg"),
    margin = {top: 20, right: 30, bottom: 30, 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 x = d3.scaleTime()
    .range([0, width]);

var y = d3.scaleLinear()
    .range([height, 0]);
 
var z = d3.scaleOrdinal(d3.schemeCategory10);

var voronoi = d3.voronoi()
    .x(function(d) { return x(d.date); })
    .y(function(d) { return y(d.value); })
    .extent([[-margin.left, -margin.top], [width + margin.right, height + margin.bottom]]);

var line = d3.line()
    .x(function(d) { return x(d.date); })
    .y(function(d) { return y(d.value); });

d3.tsv("unemployment.tsv", type, function(error, data) {
  if (error) throw error;

  x.domain(d3.extent(months));
  y.domain([0, d3.max(data, function(c) { return d3.max(c.values, function(d) { return d.value; }); })]).nice();
  z.domain(data.map(function(d) { return d.name; }))

  g.append("g")
      .attr("class", "axis axis--x")
      .attr("transform", "translate(0," + height + ")")
      .call(d3.axisBottom(x));

  g.append("g")
      .attr("class", "axis axis--y")
      .call(d3.axisLeft(y).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("Unemployment Rate");

  g.append("g")
      .attr("class", "cities")
    .selectAll("path")
    .data(data)
    .enter().append("path")
      .attr("d", function(d) { d.line = this; return line(d.values); })
  		.style("stroke", function(d) { return z(d.name); });

  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.city.line)
    	.style('stroke-width', 3)
    	.style('stroke', d3.hsl(z(d.data.city.name)).brighter(1));
   
    d.data.city.line.parentNode.appendChild(d.data.city.line);
    focus.attr("transform", "translate(" + x(d.data.date) + "," + y(d.data.value) + ")");
    focus.select("text").text(d.data.city.name + ': ' + d.data.value);
  }

  function mouseout(d) {
    d3.select(d.data.city.line)
    	.style("stroke-width", 1.5)
    	.style('stroke', z(d.data.city.name));
    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;
}

</script>

Makefile

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 > $@

package.json

{
  "name": "anonymous",
  "version": "0.0.1",
  "private": true,
  "devDependencies": {
    "d3": "3"
  }
}

process-data

#!/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)));

unemployment.tsv

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