我在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)