const _custom = function (colors, steps?) { steps = steps || 32; const subPaletteSize = Math.ceil(steps / (colors.length - 1)); const range = []; let prevColor = null; colors.forEach(function (color) { if (prevColor) { const scale = d3ScaleLinear() .domain([0, subPaletteSize]) .range([prevColor, color]) .interpolate(d3InterpolateLab as any) ; for (let i = 0; i < subPaletteSize; ++i) { range.push(scale(i)); } } prevColor = color; }); scale = d3ScaleQuantize().domain([0, 100]).range(range); return scale; };
colorInterpolator = d3Scale.interpolateWarm; colorInterpolator = d3Scale.interpolateCool; colorInterpolator = d3Scale.interpolateCubehelixDefault; // ------------------------------------------------------------------------------- // Quantize Scale Factory // ------------------------------------------------------------------------------- // scaleQuantize() ----------------------------------------------------------------- let quantizeScaleNumber: d3Scale.ScaleQuantize<number>; let quantizeScaleString: d3Scale.ScaleQuantize<string>; quantizeScaleNumber = d3Scale.scaleQuantize(); quantizeScaleString = d3Scale.scaleQuantize<string>(); // ScaleQuantize Interface ======================================================== // domain(...) ----------------------------------------------------------------- quantizeScaleNumber = quantizeScaleNumber.domain([0, 1]); quantizeScaleNumber = quantizeScaleNumber.domain([new NumCoercible(0), new NumCoercible(100)]); const domainQuantize: [number, number] = quantizeScaleNumber.domain(); // range(...) ----------------------------------------------------------------- quantizeScaleNumber = quantizeScaleNumber.range(rangeNumbers); rangeNumbers = quantizeScaleNumber.range();