// comparison of different d3 colour interpolators with // colorbrewer sequential single-hue scales // // -- http://twitter.com/cpbotha var numC = 9; var data = d3.range(numC); var showColourInterpolations = function(name, cbMap) { var rectHeight = 50, w = 960; var chart = d3.select("#chart"); chart.append('h4').text(name); var svg=chart.append("svg"); var x = d3.scale.ordinal() .domain(data) .rangeRoundBands([0, w], 0.1); var colour = d3.scale.linear() .domain(d3.extent(data)) .range([cbMap[numC][0], cbMap[numC][numC - 1]]); var addScale = function (y, colourFunc, name) { svg.append('text').attr("x", x(0)).attr("y", y-15).text(name); var textrectg = svg.append('g').selectAll("g") .data(data) .enter().append("g") .attr("transform", function(d) { return "translate(" + x(d) + "," + y + ")"; }); textrectg.append("rect") //.attr("x", function(d) {return x(d); }) //.attr("y", y) .attr("width", x.rangeBand()) .attr("height", rectHeight) .attr("fill", colourFunc ); textrectg.append("text") .text(colourFunc); } var colourBrewer = function (d) { return cbMap[numC][d]; } // https://github.com/mbostock/d3/wiki/Transitions#wiki-d3_interpolateLab var colourLab = colour.copy().interpolate(d3.interpolateLab); // https://github.com/mbostock/d3/wiki/Transitions#wiki-d3_interpolateHcl var colourHcl = colour.copy().interpolate(d3.interpolateHcl); // https://github.com/mbostock/d3/wiki/Transitions#wiki-d3_interpolateRgb var colourRgb = colour.copy().interpolate(d3.interpolateRgb); // https://github.com/mbostock/d3/wiki/Transitions#wiki-d3_interpolateHsl var colourHsl = colour.copy().interpolate(d3.interpolateHsl); var cfuncs = [['brewer', colourBrewer], ['L*a*b*', colourLab], ['HCL', colourHcl], ['RGB', colourRgb], ['HSL', colourHsl]]; for (var i = 0; i < cfuncs.length; i++) { addScale(30 + i * (rectHeight + 30), cfuncs[i][1], cfuncs[i][0]); } } mapNames = ['Blues', 'Greens', 'Oranges', 'Purples', 'Reds']; mapNames.forEach(function (mapName) {showColourInterpolations(mapName, colorbrewer[mapName]); });