Interactive: UK inflation hits 0.3 per cent, but how does it compare to other European Union countries?

UK inflation slowed to 0.3 per cent in January, lower than December’s figure of 0.5 per cent and a good distance below the two per cent target for the Bank of England.
More on this story: UK inflation falls to its lowest since records began
But the UK is not alone in missing targets: the European Union is now in outright deflation, at -0.6 per cent as a bloc, and the next batch of data is expected to show an even deeper foray into negative territory. Low inflation, or even deflation, in the UK is not a serious as it is in the Eurozone, as it reflects the lower prices of producing goods, pushed down by a drop in oil prices.
In the EU, however, things are more serious, with stifled demand contributing to falling prices. Here, in 33 charts, are the inflation rates (December 2014) for every European Union country, plus a couple of extras.
Hover over a chart to compare it with other countries, or, on mobile, tap on any line to compare that point across all graphs.
var parseDate = d3.time.format("%b %Y").parse, bisectDate = d3.bisector(function(d) { return d.date; }).left, formatValue = d3.format(",.2f"), formatPercent = function(d) { return formatValue(d) + "%"; };
var x = d3.time.scale().range([0, width]);
var y = d3.scale.linear().range([height, -8]);
var area = d3.svg.area() .x(function(d) { return x(d.date); }) .y0(height) .y1(function(d) { return y(d.rate); })
var line = d3.svg.line() .x(function(d) { return x(d.date); }) .y(function(d) { return y(d.rate); });
var base = d3.svg.line() .x(function(d) { return x(d.date); }) .y(function(d) { return y(d.base); });
var xAxis = d3.svg.axis() .scale(x) .orient("bottom") .ticks(4) .outerTickSize([0]) .innerTickSize([0]);
var yAxis = d3.svg.axis() .scale(y) .orient("left") .ticks(3) .outerTickSize([0]) .innerTickSize([0]);
d3.csv("/wp-content/uploads/custom/15/0216-euroinfla-2.csv", type, function(error, data) {
// Nest data by region. var regions = d3.nest() .key(function(d) { return d.region; }) .entries(data);
// Compute the maximum rate per region, needed for the y-domain. regions.forEach(function(s) { s.maxrate = d3.max(s.values, function(d) { return d.rate; }); });
// Compute the minimum and maximum date across regions. // We assume values are sorted by date. x.domain([ d3.min(regions, function(s) { return s.values[0].date; }), d3.max(regions, function(s) { return s.values[s.values.length - 1].date; }) ]);
// Add an SVG element for each region, with the desired dimensions and margin. var svg = d3.select("#cam-d3-euroinflation").selectAll("svg") .data(regions) .enter().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 + ")");
// Add the area path elements. Note: the y-domain is set per element. svg.append("path") .attr("class", "area") .attr("d", function(d) { y.domain([-6.3, 23]); return area(d.values)}) .style("fill", function(d) { var current = d.values[d.values.length - 1].rate.toFixed(1); if (current d1.date - x0 ? bisectIndex : bisectIndex - 1; } return d.values[bisectIndex] } } });
function type(d) { d.rate = +d.rate; d.date = parseDate(d.date); return d; }