D3:精炼序数规模以返回颜色组?

Ric*_*ard 6 javascript d3.js

我在D3.js中设置了如下的序数比例,到目前为止效果很好:

var color = d3.scale.ordinal().range([ 'blue', 'red', 'green' ]); 
color.domain();  
console.log(color(0)); // returns 'blue'
Run Code Online (Sandbox Code Playgroud)

但是,我真正想做的是能够将两个数字传递到刻度中,并让它返回蓝色,红色或绿色的特定子阴影 - 主要阴影取决于第一个数字,子阴影取决于第二个数字.

也许我可以用某种方式将d3.scale.ordinal()d3.interpolateRgb()结合起来做到这一点?我不确定interpolateRgb是否是正确的选择,因为颜色是一致的,取决于输入数字.

所以这就是我想要实现的目标:

color(0, 256); // return a shade of blue
color(0, 257); // return a second shade of blue
color(0, 256); // return the first shade of blue again
Run Code Online (Sandbox Code Playgroud)

在D3中实现这一目标的任何想法?谢谢您的帮助.

Jos*_*osh 13

你可以考虑这样的事情:

var colorgroup = d3.scale.ordinal()
    .domain(d3.range(3))
    .range([ 'blue', 'red', 'green' ]); 
var brightrange = d3.scale.linear()
    .domain([0,300])
    .range([0,3]);  
function color(group,shift) {
     if (shift >= 0) {return d3.hsl(colorgroup(group)).darker(brightrange(shift));}
     else {return d3.hsl(colorgroup(group)).brighter(brightrange(-shift));}             
} 
Run Code Online (Sandbox Code Playgroud)

例子:

console.log(color(0,255)); //dark blue
console.log(color(0,0)); //med blue
console.log(color(0,-150)); //light blue
Run Code Online (Sandbox Code Playgroud)