Суть заключалась в том, чтобы нанести начальные и конечные значения на оси x / y с градиентным прямоугольником между переходами от низкого (непрозрачность 0,4) к высокому (непрозрачность 0).
Вскоре я обнаружил, что градиенты не были встроенной функцией d3.js.
На мой взгляд, каждый прямоугольник должен иметь уникальный градиент, чтобы отображать правильный цвет в правильном направлении. Чтобы решить эту проблему, я написал функцию градиентов, принимающую несколько переменных следующим образом:
Шаг 1 заключался в добавлении «def» и градиента к svg:
svg.append («defs»)
.append («linearGradient»)
Шаг 2 - определить уникальный id градиента (переменная 1):
.attr («идентификатор», идентификатор)
Затем определите направление градиента с помощью переменных 2 и 3: x1, x2. Для слева направо x1 = 0%, x2 = 100% и наоборот.
.attr («x1», x1) .attr («y1», «0%»)
.attr («x2», x2) .attr («y2», «0%»);
Затем дважды выберите новый def, используя определенный idtag:
idtag = ‘#’ + id
и определите начальный и конечный классы. Оба этих выбора принимают наши последние пять переменных: color, off1, off2, op1 и op2.
d3.select (idtag)
.append («стоп»)
.attr («стоп-цвет», цвет)
.attr («класс», » begin »)
.attr (« offset », off1)
.attr (« stop-opacity », op1);
d3.select (idtag)
.append («стоп»)
.attr («класс», «конец»)
.attr («стоп- цвет », цвет)
.attr (« смещение », выкл2)
.attr (« стоп-непрозрачность », op2);
Смещение использовалось для круговых конечных точек, которые на самом деле представляют собой круги с градиентом. Таким образом, если изменение отрицательное (от высокого к низкому, оранжевый, красный и фиолетовый на изображении), начальное смещение составляет 50%, конечное смещение равно 0%, то есть только правая половина круга нарисовано.
Непрозрачность работает аналогичным образом. Поэтому, если изменение положительное (от низкого к высокому, зеленый и синий на изображении), начальная непрозрачность составляет 0,4 (непрозрачность 0,4), а конечная непрозрачность - 1 (полный цвет).
Затем эту функцию необходимо вызвать при установке стиля заливки в прямоугольнике или круге (или любой другой форме, если на то пошло):
.style («заливка», функция (d) {
if (d.end_v ›d.start_v) {
gradient (color (d.label), 'circ' + d.id , «100%», «0%», «50%», «0%», 0,1)
} else {
gradient (color (d.label), 'circ' + d .id, «0%», «100%», «50%», «0%», 0,1)
} return «url (#circ» + d.id + »)»; })
Возвращенный тег «url (#circ» + d.id + ») запускает градиент в действие.
Если вы хотите попробовать, вы можете найти визуализацию в действии здесь или полный код здесь.