d3.scaleLinear()
返回一个 RGB 字符串值,尽管该范围是用十六进制值映射的。我的使用中是否有错误?
const value = 0;
col = d3.scaleLinear().domain([0, 16000]).range(["#ffdc00","#ffa900"]);
console.log(col(value));
//returns rgb(255, 220, 0)
d3-scale
依赖于d3-interpolate
,每当检测到颜色时,它默认使用d3.interpolateRgb
(来源(:
如果 b 是颜色或可强制转换为颜色的字符串,请使用插值 Rgb。
如d3.interpolateRgb
文档中所述:
插值器的返回值是 RGB 字符串。
因此,行为是正常的,并且提供的代码示例完全没问题。
RGB 字符串等效于它们的十六进制表示形式,因此可以直接使用它们。
如果用例需要十六进制字符串,则可以使用d3-color
color.formatHex
函数,如下面的代码片段所示:
const value = 0;
col = d3.scaleLinear().domain([0, 16000]).range(["#ffdc00","#ffa900"]);
let rgbValue = col(value)
console.log('rgb string:', rgbValue);
console.log('hex string:', d3.color(rgbValue).formatHex());
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.15.0/d3.min.js"></script>