|
<!DOCTYPE html> |
|
<meta charset="utf-8"> |
|
<style> |
|
body { |
|
font: 12px sans-serif; |
|
} |
|
.axis path { |
|
shape-rendering: crispEdges; |
|
} |
|
.axis path { |
|
fill: none; |
|
} |
|
.axis line { |
|
stroke: #aaa; |
|
} |
|
.y.axis line { |
|
stroke-dasharray: 2 2; |
|
} |
|
.axis .tick text { |
|
font: 12px sans-serif; |
|
} |
|
.x.axis path { |
|
display: none; |
|
} |
|
.dot { |
|
stroke : white; |
|
stroke-width: 1.2px; |
|
} |
|
.line { |
|
fill: none; |
|
stroke: steelblue; |
|
stroke-width: 2px; |
|
} |
|
</style> |
|
<body> |
|
<script src="//d3js.org/d3.v3.min.js"></script> |
|
<script src="taxes.js"></script> |
|
<script> |
|
|
|
var series = [ |
|
{ 'color':"#60BD68", 'name':"Þingmenn", 'values':[] }, |
|
{ 'color':"#FAA43A", 'name':"Ráðherrar", 'values':[] }, |
|
{ 'color':"#5DA5DA", 'name':"Forsætisráðherra", 'values':[] }, |
|
{ 'color':"#4D4D4D", 'name':"Forseti Íslands", 'values':[] } |
|
]; |
|
var inflation = "Vísitala Neysluverðs"; |
|
var numfmt = d3.format(",.0f"); |
|
|
|
var margin = {top: 20, right: 120, bottom: 30, left: 95}, |
|
width = 960 - margin.left - margin.right, |
|
height = 500 - margin.top - margin.bottom; |
|
|
|
var x = d3.time.scale() |
|
.range([5, width]); |
|
|
|
var y = d3.scale.linear() |
|
.range([height, 0]); |
|
|
|
var xAxis = d3.svg.axis() |
|
.scale(x) |
|
.orient("bottom"); |
|
|
|
var yAxis = d3.svg.axis() |
|
.scale(y) |
|
.tickSize(-width) |
|
.tickFormat(d => numfmt(d).replace(/,/g, '.')) |
|
.orient("left"); |
|
|
|
var line = d3.svg.line() |
|
.x(d => x(d.date)) |
|
.y(d => y(d.value)); |
|
|
|
var svg = d3.select("body").append("svg") |
|
.attr("width", width + margin.left + margin.right) |
|
.attr("height", height + margin.top + margin.bottom) |
|
.append("g") |
|
.attr("transform", "translate("+[margin.left, margin.top]+")"); |
|
|
|
d3.csv("data.csv", ( err, data ) => { |
|
if (err) throw err; |
|
|
|
// parse and convert to series |
|
data.forEach(function ( d ) { |
|
var date = new Date(Date.parse(d.date)), |
|
inflation_l = +data[data.length - 1][inflation], |
|
inflation_c = +d[inflation], |
|
devalue = inflation_c / inflation_l; |
|
series.forEach(s => { |
|
var brutto = ~~(+d[s.name] / devalue); |
|
s.values.push({ |
|
'date': date, |
|
'amount': +d[s.name], |
|
'value': pay_taxes(brutto, date), |
|
'series': s, |
|
}); |
|
}); |
|
}); |
|
|
|
x.domain(d3.extent(series[0].values, d => d.date)); |
|
y.domain([ |
|
d3.min(series, c => d3.min(c.values, v => v.value)), |
|
d3.max(series, c => d3.max(c.values, v => v.value)) |
|
]).nice(); |
|
|
|
svg.append("g") |
|
.attr("class", "x axis") |
|
.attr("transform", "translate(0," + height + ")") |
|
.call(xAxis); |
|
|
|
svg.append("g") |
|
.attr("class", "y axis") |
|
.call(yAxis) |
|
.selectAll('.tick text') |
|
.attr('x', -8) |
|
|
|
svg.append("text") |
|
.attr("transform", `translate(-85,${height / 2}) rotate(-90)`) |
|
.attr("dy", ".71em") |
|
.style("text-anchor", "middle") |
|
.text("Laun eftir skatt á verðlagi ársins "+ |
|
x.domain()[1].getUTCFullYear() +" (kr.)"); |
|
|
|
var job = svg.selectAll(".job") |
|
.data(series) |
|
.enter().append("g") |
|
.attr("class", "job"); |
|
|
|
job.append("path") |
|
.attr("class", "line") |
|
.attr("d", d => line(d.values)) |
|
.style("stroke", d => d.color); |
|
|
|
job.selectAll(".dot") |
|
.data(p => p.values).enter() |
|
.append('path') |
|
.attr("class", "dot") |
|
.attr("transform", d => "translate("+[x(d.date), y(d.value)]+")") |
|
.attr("d", d3.svg.symbol().size(32)) |
|
.style("fill", d => d.series.color); |
|
|
|
job.append("text") |
|
.datum(d => d.values[d.values.length - 1]) |
|
.attr("transform", d => "translate("+[x(d.date), y(d.value)]+")") |
|
.style('font', '12px sans-serif') |
|
.attr("x", 10) |
|
.attr("dy", ".35em") |
|
.text(d => d.series.name); |
|
|
|
}); |
|
</script> |