Визуальные переменные в графиках играют роль не менее важную, чем
сами числовые данные, и цветовая кодировка часто становится основным
каналом передачи структуры. В экосистеме D3.js модуль
d3-scale-chromatic предоставляет набор стандартизированных
цветовых схем и интерполяций, позволяющих согласованно работать с
категориальными, последовательными и дивергентными шкалами.
Цветовые схемы в D3 разделяются на несколько крупных семейств, каждое из которых соответствует определённому типу данных:
Модуль d3-scale-chromatic не создаёт шкалы напрямую, а
предоставляет набор готовых палитр и функций интерполяции, которые
используются совместно с d3-scale.
Ключевая идея заключается в разделении ответственности:
d3-scale определяет соответствие данных и
диапазонаd3-scale-chromatic определяет визуальную структуру
цветаКатегориальные палитры предназначены для дискретных наборов значений, где отсутствует упорядоченность.
Наиболее часто используемые схемы:
schemeCategory10schemeCategory20schemeTableau10schemeSet3Каждая схема представляет собой массив HEX-цветов.
Пример использования:
import * as d3 from "d3";
import { schemeCategory10 } from "d3-scale-chromatic";
const color = d3.scaleOrdinal()
.domain(["A", "B", "C", "D"])
.range(schemeCategory10);
Семантика категориальных схем основана на максимальном визуальном различении соседних цветов. При этом отсутствует подразумеваемая иерархия значений.
Особенность схемы schemeTableau10 заключается в
повышенной читаемости на экранах и в печати, что делает её
предпочтительной в аналитических интерфейсах.
Последовательные схемы применяются к непрерывным данным, где значения имеют естественный порядок.
Основные наборы:
schemeBluesschemeGreensschemeGreysschemeOrangesschemePurplesОни строятся так, чтобы светлота или насыщенность изменялась монотонно.
Пример:
import { scaleSequential } from "d3-scale";
import { interpolateBlues } from "d3-scale-chromatic";
const color = scaleSequential()
.domain([0, 100])
.interpolator(interpolateBlues);
Последовательные схемы часто применяются в тепловых картах, где интенсивность цвета напрямую соответствует величине показателя.
Дивергентные схемы предназначены для данных, отклоняющихся от центрального значения. Они особенно эффективны для отображения разницы относительно нуля или среднего уровня.
Примеры схем:
schemeRdBuschemeRdYlBuschemePiYGschemePRGnСтруктура таких схем симметрична относительно центральной точки:
Пример:
import { scaleDiverging } from "d3-scale";
import { interpolateRdBu } from "d3-scale-chromatic";
const color = scaleDiverging()
.domain([-1, 0, 1])
.interpolator(interpolateRdBu);
Такая модель особенно эффективна в визуализации корреляций, отклонений и процентных изменений.
Помимо фиксированных палитр, модуль предоставляет функции интерполяции, позволяющие генерировать плавные переходы между цветами.
Основные интерполяции:
interpolateRgbinterpolateHslinterpolateHclinterpolateLabinterpolateCubeheliximport { interpolateRgb } from "d3-scale-chromatic";
const i = interpolateRgb("#ff0000", "#0000ff");
i(0.5);
RGB-интерполяция проста, но не всегда визуально равномерна.
Интерполяции Lab и HCL основаны на
восприятии цвета человеком. Они обеспечивают более равномерные переходы
яркости и насыщенности.
import { interpolateHcl } from "d3-scale-chromatic";
const i = interpolateHcl("steelblue", "orange");
HCL особенно полезен в аналитической визуализации, где важна равномерность восприятия градиента.
Цветовые схемы напрямую интегрируются в шкалы D3:
Используются для категорий:
d3.scaleOrdinal()
.domain(dataCategories)
.range(schemeSet3);
Используются для непрерывных значений:
d3.scaleSequential(interpolateViridis)
.domain([0, 1000]);
Используются для симметричных данных:
d3.scaleDiverging(interpolateSpectral)
.domain([-100, 0, 100]);
Особое место занимают схемы, основанные на равномерности восприятия:
interpolateViridisinterpolateInfernointerpolateMagmainterpolatePlasmaЭти схемы оптимизированы для корректного восприятия при печати и на экранах с разной калибровкой.
import { interpolateViridis } from "d3-scale-chromatic";
const color = d3.scaleSequential(interpolateViridis)
.domain([0, 1]);
Их характерная особенность — отсутствие резких скачков яркости и улучшенная читаемость для дальтонических режимов.
Выбор схемы зависит от структуры данных:
В сложных визуализациях часто комбинируются несколько схем одновременно, например, категориальная раскраска групп и последовательный градиент внутри каждой группы.
Модуль d3-scale-chromatic не хранит фиксированные
визуальные стили, а предоставляет вычисляемые функции и массивы цветов,
основанные на научных моделях восприятия цвета.
Ключевые принципы:
Такая архитектура позволяет интегрировать палитры в любые типы шкал без изменения логики отображения данных.