У меня есть стандартная карта с 50 состояниями, построенная с d3, в которой я динамически раскрашиваю состояния в соответствии с различными наборами данных. Независимо от набора данных значения нормируются по шкале от 0 до 1, где 1 соответствует состоянию с наивысшим значением. Я ищу способ расчета тени состояния, используя значение нормированной точки данных.Создание динамического градиента с помощью HSL или RGB
В прошлом я выбрал базовый цвет, который мне нравится - скажем, 900, - и установите fill
каждого состояния этому цвету и opacity
на нормализованное значение. Это работает хорошо, сэкономить на две проблемы:
- Когда цвет холста имеет цвет фона, для его затенения требуется нарисовать пустое белое состояние; и
- выведение цвета таким образом, может выглядеть пастообразными
Но мне очень нравится быть в состоянии установить цвет динамически, а не дело с баками для сбора данных и заданных массивов значений RGB для градиента. Поэтому мне интересно, есть ли лучший способ. Я могу позаботиться о преобразовании, если альтернативная система цветов будет работать лучше.
d3 имеет запеченные в HSL конвертер, поэтому я попытался это:
// 0 <= val <= 1
function colorize(val) {
// nudge in the extremes
val = 0.2 + 0.6 * val;
return d3.hsl(0, val, 1 - val);
}
Он работает нормально - Это карта ловильных работ, которые наиболее распространены в штате Мэн и Орегон - но я Подозреваю, что есть лучший способ. Идеи?
Нужна, не осознала, что d3 может это сделать - очень круто. Спасибо! –