我已经设置了一个序数尺度D3.js https://github.com/mbostock/d3/wiki/API-Reference如下,到目前为止效果很好:
var color = d3.scale.ordinal().range([ 'blue', 'red', 'green' ]);
color.domain();
console.log(color(0)); // returns 'blue'
然而,我真正想做的是能够通过two将数字输入比例尺,并让它返回特定的蓝色、红色或绿色子色调 - 主色调取决于第一个数字,子色调取决于第二个数字。
也许我可以结合d3.scale.ordinal() https://github.com/mbostock/d3/wiki/Ordinal-Scales#wiki-ordinal with d3.interpolateRgb() https://github.com/mbostock/d3/wiki/Transitions#wiki-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 中实现这一目标有什么想法吗?感谢您的帮助。
你可以考虑这样的事情:
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)