D3:优化序数比例以返回颜色组

D3: refining ordinal scale to return groups of colours?

本文关键字:返回 颜色 优化 序数 D3      更新时间:2023-09-26

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

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

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

也许我可以以某种方式将 d3.scale.ordinal() 与 d3.interpolateRgb() 结合起来?我不确定插值Rgb是否是正确的选择,因为颜色是否一致很重要,具体取决于输入数字。

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

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中实现这一目标的任何想法?谢谢你的帮助。

你可以考虑这样的事情:

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