Ответ 1
Вы должны использовать значение "pivot" для домена, например:
d3.scale.linear()
.domain([0, pivot, max])
.range(['red', 'green', 'blue']);
В документации для доменов с непрерывным масштабированием:
Хотя непрерывные масштабы обычно имеют по два значения в каждом домене и диапазоне, задавая более двух значений, получается кусочный масштаб. Например, для создания расходящейся цветовой шкалы, которая интерполирует между белым и красным для отрицательных значений, а белый и зеленый для положительных значений, скажем:
var color = d3.scaleLinear()
.domain([-1, 0, 1])
.range(["red", "white", "green"]);
color(-0.5); // "rgb(255, 128, 128)"
color(+0.5); // "rgb(128, 192, 128)"