// Generated by CoffeeScript 1.10.0 (function() { var INNER_RADIUS, OUTER_OUTER_OUTER_RADIUS, OUTER_OUTER_RADIUS, OUTER_RADIUS, arc_generator, height, r_cloud, r_prec, r_temp, refs, refs_data, refs_labels_north, refs_labels_south, station, svg, temp_color, width, year; svg = d3.select('svg'); width = svg.node().getBoundingClientRect().width; height = svg.node().getBoundingClientRect().height; svg.attr({ viewBox: (-width / 2) + " " + (-height / 2) + " " + width + " " + height }); OUTER_OUTER_OUTER_RADIUS = 230; OUTER_OUTER_RADIUS = 200; OUTER_RADIUS = 180; INNER_RADIUS = 40; r_temp = d3.scale.linear().domain([-40, 40]).range([INNER_RADIUS, OUTER_RADIUS]); r_prec = d3.scale.linear().domain([0, 30]).range([OUTER_OUTER_RADIUS, OUTER_RADIUS]); r_cloud = d3.scale.linear().domain([0, 10]).range([OUTER_OUTER_RADIUS, OUTER_OUTER_OUTER_RADIUS]); temp_color = d3.scale.linear().domain([-20, 0, 20, 40]).range([d3.hcl(290, 70, 15), d3.hcl(230, 70, 45), d3.hcl(80, 70, 75), d3.hcl(10, 70, 45)]).interpolate(d3.interpolateHcl); arc_generator = d3_shape.arc(); refs_data = d3.range(-20, 40, 10); refs = svg.selectAll('.ref').data(refs_data); refs.enter().append('circle').attr({ "class": 'ref', r: function(d) { return r_temp(d); }, stroke: function(d) { if (d === 0) { return '#CCC'; } else { return '#EEE'; } } }); refs_labels_north = svg.selectAll('.ref_label_north').data(refs_data); refs_labels_north.enter().append('text').text(function(d) { return d + "°C"; }).attr({ "class": 'ref_label_north', y: function(d) { return -r_temp(d); }, dy: '0.35em', fill: function(d) { if (d === 0) { return '#BBB'; } else { return '#DDD'; } } }); refs_labels_south = svg.selectAll('.ref_label_south').data(refs_data); refs_labels_south.enter().append('text').text(function(d) { return d + "°C"; }).attr({ "class": 'ref_label_south', y: function(d) { return r_temp(d); }, dy: '0.35em', fill: function(d) { if (d === 0) { return '#BBB'; } else { return '#DDD'; } } }); svg.append('circle').attr({ "class": 'prec_ref', r: OUTER_RADIUS }); station = 'LIRP'; year = 2015; d3.csv("wu_get_history.php?station=" + station + "&year=" + year, function(days) { var angle, cloud_bars, enter_cloud_bars, enter_prec_bars, enter_temp_bars, prec_bars, temp_bars; days.forEach(function(d) { d.t = d['CET']; d['MinTemperatureC'] = +d['MinTemperatureC']; d['MaxTemperatureC'] = +d['MaxTemperatureC']; d['MeanTemperatureC'] = +d['MeanTemperatureC']; d['Precipitationmm'] = +d['Precipitationmm']; return d['CloudCover'] = +d['CloudCover']; }); svg.append('text').text(station).attr({ "class": 'title', dy: '0.35em' }); angle = d3.scale.ordinal().domain(days.map(function(d) { return d.t; })).range(d3.range(Math.PI / 2, 2 * Math.PI + Math.PI / 2, 2 * Math.PI / days.length)); temp_bars = svg.selectAll('.temp_bar').data(days); enter_temp_bars = temp_bars.enter().append('path').attr({ "class": 'bar temp_bar', d: function(d, i) { return arc_generator({ innerRadius: r_temp(d['MinTemperatureC']), outerRadius: r_temp(d['MaxTemperatureC']), startAngle: i * 2 * Math.PI / days.length, endAngle: (i + 1) * 2 * Math.PI / days.length }); }, fill: function(d) { return temp_color(d['MeanTemperatureC']); } }); enter_temp_bars.append('title').text(function(d) { return (d3.time.format('%Y, %B %e')(new Date(d.t))) + "\nTemperature:\n Min: " + d['MinTemperatureC'] + " °C\n Max: " + d['MaxTemperatureC'] + " °C\n Mean: " + d['MeanTemperatureC'] + " °C"; }); prec_bars = svg.selectAll('.prec_bar').data(days); enter_prec_bars = prec_bars.enter().append('path').attr({ "class": 'prec_bar', d: function(d, i) { return arc_generator({ innerRadius: r_prec(0), outerRadius: r_prec(d['Precipitationmm']), startAngle: i * 2 * Math.PI / days.length, endAngle: (i + 1) * 2 * Math.PI / days.length }); } }); enter_prec_bars.append('title').text(function(d) { return (d3.time.format('%Y, %B %e')(new Date(d.t))) + "\nPrecipitation: " + d['Precipitationmm'] + " mm"; }); cloud_bars = svg.selectAll('.cloud_bar').data(days); enter_cloud_bars = cloud_bars.enter().append('path').attr({ "class": 'cloud_bar', d: function(d, i) { return arc_generator({ innerRadius: r_cloud(0), outerRadius: r_cloud(d['CloudCover']), startAngle: i * 2 * Math.PI / days.length, endAngle: (i + 1) * 2 * Math.PI / days.length }); } }); enter_cloud_bars.append('title').text(function(d) { return (d3.time.format('%Y, %B %e')(new Date(d.t))) + "\nCloud cover: " + d['CloudCover']; }); svg.append('line').attr({ "class": 'hand', x1: 0, x2: 0, y1: -INNER_RADIUS + 10, y2: -OUTER_RADIUS - 40 }); return svg.append('text').text(year).attr({ "class": 'hand_label', x: 4, y: -OUTER_RADIUS - 40, dy: '0.6em' }); }); }).call(this);