D3 scaleLinear() 返回 rgb 值,尽管范围以十六进制值表示



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-colorcolor.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>

最新更新