6

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

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

但是,我真正想做的是能够将两个数字传递给比例,并让它返回一个特定的蓝色、红色或绿色子阴影——主要阴影取决于第一个数字,子阴影取决于第二个数字。

也许我可以以某种方式将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

在 D3 中实现这一点的任何想法?感谢您的帮助。

4

1 回答 1

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));}             
} 

例子:

console.log(color(0,255)); //dark blue
console.log(color(0,0)); //med blue
console.log(color(0,-150)); //light blue
于 2012-05-01T01:40:58.317 回答