颜色插值函数-d3
<pre><code class="language-javascript">/**
* 计算颜色插值
* @param {*} colors 颜色数组
* @param {*} value 当前值
* @param {*} min 最小值
* @param {*} max 最大值
* @returns
*/
export function interpolateColor(colors, min, max) {
const ColorIndex = d3.interpolateNumber(0, colors.length - 1);
const scale = d3.scaleLinear().domain([min, max]).range([0, 1]);
return function (value, format) {
let valueMap = scale(value);
if (valueMap &gt; 1) {
valueMap = 1;
}
if (valueMap &lt; 0) {
valueMap = 0;
}
const index = ColorIndex(valueMap);
const startIndex = Math.floor(index);
const endIndex = Math.ceil(index);
if (startIndex === endIndex) {
return format &amp;&amp; format === 'hex' ? rgbToHex(d3.rgb(colors[startIndex])) : d3.rgb(colors[startIndex]);
} else {
const colorSplit = d3.interpolateRgb(colors[startIndex], colors[endIndex]);
const calc = index - startIndex;
return format &amp;&amp; format === 'hex' ? rgbToHex(d3.rgb(colorSplit(calc))) : d3.rgb(colorSplit(calc));
}
};
}</code></pre>