Я пишу последовательную цветовую шкалу для расходящихся чисел с D3 v4 и D3 Scale Chromatic.d3.scaleSequential «интерполятор не является функцией»
Вот моя функция:
var divergentColor = function(value, theDomain, interpolation) {
var theDomain = theDomain || [0, 50, 100];
var theInterpolation = interpolation || 'BrBg';
var scale = d3.scaleSequential()
.interpolator(d3['interpolate' + theInterpolation])
.domain(theDomain)
.clamp(true);
return scale(value);
};
divergentColor(25);
<script src="https://d3js.org/d3.v4.js"></script>
<script src="https://d3js.org/d3-scale-chromatic.v1.js"></script>
Я получаю следующее сообщение об ошибке при вызове этой функции:
d3.v4.js:12808 Uncaught TypeError: interpolator is not a function
Это реализация D3 по scaleSequential
: https://github.com/d3/d3-scale/blob/master/src/sequential.js#L21
import {linearish} from "./linear";
export default function sequential(interpolator) {
var x0 = 0,
x1 = 1,
clamp = false;
function scale(x) {
var t = (x - x0)/(x1 - x0);
return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);
}
scale.domain = function(_) {
return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];
};
scale.clamp = function(_) {
return arguments.length ? (clamp = !!_, scale) : clamp;
};
scale.interpolator = function(_) {
return arguments.length ? (interpolator = _, scale) : interpolator;
};
scale.copy = function() {
return sequential(interpolator).domain([x0, x1]).clamp(clamp);
};
return linearish(scale);
}
Кажется, это довольно простая функция. Не уверен, что я делаю неправильно, или если есть проблема с самим D3. Любой совет?
Это только опечатка: вы должны использовать 'BrBG' вместо' BrBg'. –
Нет разницы. Я протестировал его с помощью нескольких интерполяторов, скопированных из документов, и результат будет таким же. – TaxFoundation
Я только что написал ответ со сниппетом, проверьте его. –