D3 2.10.0 adds support for CIE L*a*b* and HCL. These colors spaces are designed with perception in mind. RGB and HSL interpolation can cause unintentional grouping due to parts of the color space appearing more visually similar; L*a*b* and HCL, in contrast, are perceptually-uniform. For more information, see Gregor Aisch’s post How To Avoid Equidistant HSV Colors and Drew Skau’s post Dear NASA: No More Rainbow Color Scales, Please.
You can create L*a*b* or HCL colors using d3.lab or d3.hcl. For example:
var steelblue = d3.lab(52, -4, -32);
var steelblue = d3.hcl(-97, 32, 52);
You can also convert from RGB or HSL:
var steelblue = d3.lab("#4682b4");
var steelblue = d3.hcl("hsl(207, 44%, 49%)");
Best of all, you can use d3.interpolateLab or d3.interpolateHcl in conjunction with quantitative scales or with transitions:
var color = d3.scale.linear()
.range(["steelblue", "brown"])
.interpolate(d3.interpolateHcl);
L*a*b* and HCL interpolation is a convenient way to implement color scales that are comparable in quality to Colorbrewer.