var margin = { top: 20, right: 0, bottom: 20, left: 30 }; var width = 680 - margin.left - margin.right; var height = 360 - margin.top - margin.bottom; var x = d3.scale.ordinal() .rangeRoundBands([0, width]); var y = d3.scale.linear() .rangeRound([height - 20, 0]); var xLabel = d3.time.scale() .domain([new Date(1960, 0, 1), new Date(2014, 11, 31)]) .range([0, width]); var xAxis = d3.svg.axis() .scale(xLabel) .ticks(3) .tickFormat(d3.time.format("%Y")); var yAxis = d3.svg.axis() .scale(y) .ticks(4) .orient("left"); var line = d3.svg.line() .defined(function(d) { if (!isNaN(d.value)) { return d.value; } }) .interpolate("cardinal") .x(function(d) { return x(d.label) + x.rangeBand() / 2; }) .y(function(d) { return y(d.value); }); var colors = ["#fff7ec", "#fee8c8", "#fdd49e", "#fdbb84", "#fc8d59", "#ef6548", "#d7301f", "#b30000", "#7f0000", "#cc4c02", "#993404", "#662506"]; var color = d3.scale.ordinal().range(colors); var dateFormat = d3.time.format("%Y"); var svg = d3.select("#chart").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("Global-ocean-land-temperatures.csv", function(error, data) { // console.log(data); var years = Object.keys(data[0]); years.sort(); var labelVar = 'year'; var varNames = d3.keys(data[0]).filter(function(key) { return key !== labelVar; }); color.domain(varNames); var seriesData = varNames.map(function(name) { return { name: name, values: data.map(function(d) { return { name: name, label: d[labelVar], value: +d[name] }; }) }; }); // console.log(seriesData); data.forEach(function(d) { d.year = +d.year; }); x.domain(data.map(function(d) { return d.year; })); y.domain([d3.min(seriesData, function(c) { return d3.min(c.values, function(d) { return d.value; }); }), d3.max(seriesData, function(c) { return d3.max(c.values, function(d) { return d.value; }); }) ]); svg.append("g") .attr("class", "x axis") .attr("transform", "translate(0," + height + ")") .call(xAxis); svg.append("g") .attr("class", "y axis") .call(yAxis) .append("text") .attr("x", 0) .attr("y", 0) .attr("dy", ".71em") .style("text-anchor", "end") .text("°C"); var series = svg.selectAll(".series") .data(seriesData) .enter().append("g") .attr("class", "series") .attr("transform", "translate(-20,0)"); series.append("path") .attr("class", "line") .attr("id", function(d) { return d.name }) .attr("stroke", function(d, i){ return colors[i]; }) .attr("opacity", 0) .transition() .delay(function(d, i) { return i * 550; }) .duration(500) .attr("d", function(d, i) { return line(d.values); }) .attr("opacity", 1); });