Шкалы

Шкалы сопоставляют значения данных (числа, даты, категории и другие) с визуальными значениями: координатами в пикселях, цветами, размерами. Они лежат в основе визуализации, поскольку определяют способ кодирования данных. Vega предоставляет шкалы для непрерывных и дискретных данных, позволяющие кодировать положение, форму, размер и цвет.

Для отображения шкал в спецификацию Vega можно добавить оси или легенды. Подробности о цветовых кодировках см. в справочнике цветовых схем. Внутри Vega использует шкалы библиотеки d3-scale; подробнее о ней рассказывается в материале Майка Бостока «Introducing d3-scale».

Содержание раздела

Свойства шкал

Свойства, общие для разных типов шкал.

Свойство Тип Описание
name String Обязательно. Уникальное имя шкалы. Шкалы и проекции используют общее пространство имён, поэтому их имена не должны совпадать.
type String Тип шкалы (по умолчанию linear). Подробнее см. справочник типов шкал.
domain Область определения Входные значения шкалы. Для количественных данных это может быть массив из минимального и максимального значений, для порядковых или категориальных — массив допустимых значений. Область определения также можно задать ссылкой на источник данных. Подробнее см. описание областей определения.
domainMax Number Задаёт максимальное значение области определения, переопределяя domain. Предназначено только для шкал с непрерывной областью определения.
domainMin Number Задаёт минимальное значение области определения, переопределяя domain. Предназначено только для шкал с непрерывной областью определения.
domainMid Number Добавляет промежуточное значение в область определения из двух границ. Оно должно находиться между минимумом и максимумом. Полезно для задания середины расходящейся цветовой шкалы. Применяется только к шкалам с непрерывными кусочными областями определения.
domainRaw Array Массив исходных значений, который, если он не равен null, напрямую переопределяет domain. Полезен для перемещения и масштабирования шкалы: начальная область может вычисляться из данных через domain, а затем меняться при действиях пользователя через domainRaw.
interpolate String | Object Способ интерполяции значений диапазона. По умолчанию непрерывные шкалы используют общий интерполятор для чисел, дат, строк и цветов в пространстве RGB. Для цветов можно выбрать другое пространство: rgb, hsl, hsl-long, lab, hcl, hcl-long, cubehelix или cubehelix-long. Варианты с -long используют более длинный путь в полярном цветовом пространстве. Объектная форма содержит строковое свойство type и необязательное числовое gamma для интерполяторов rgb и cubehelix. Подробнее см. документацию d3-interpolate.
range Диапазон Набор визуальных значений шкалы. Для чисел обычно задаётся массивом из минимума и максимума. Для порядковых или квантованных данных может быть массивом выходных значений, сопоставляемых значениям области определения. Подробнее см. описание диапазонов.
reverse Boolean Логический признак (по умолчанию false), меняющий порядок значений диапазона на обратный.
round Boolean Логический признак (по умолчанию false), округляющий числовые выходные значения до целых. Полезен для выравнивания по пиксельной сетке.

Типы шкал

Количественные шкалы

Количественная шкала сопоставляет непрерывную область определения (числа или даты) с непрерывным диапазоном визуальных значений (координатами, размерами, цветами). Доступные значения type: linear, log, pow, sqrt, symlog, time и utc. У всех количественных шкал, кроме time и utc, область определения domain и единичный диапазон range по умолчанию равны [0, 1].

Все количественные шкалы поддерживают цветовые диапазоны, заданные массивом строк цветов или цветовой схемой. Если диапазон содержит два цвета, создаётся последовательная цветовая шкала; если три — расходящаяся. При большем числе значений область определения и диапазон должны содержать одинаковое количество элементов: между ними применяется кусочная интерполяция.

Свойство Тип Описание
bins Интервалы ≥ 5.0 Границы интервалов в области определения шкалы, например вычисленные преобразованием bin. Оси и легенды используют их при выборе делений и подписей. Можно указать массив границ или объект спецификации. Подробнее см. описание интервалов шкал.
clamp Boolean Логический признак (по умолчанию false), ограничивающий выходные значения пределами range. Без ограничения значение за пределами domain может при экстраполяции дать результат вне range. При включённом ограничении результат всегда остаётся в диапазоне шкалы.
padding Number Расширяет область определения так, чтобы с каждого края диапазона осталось заданное число пикселей. Для правильной работы параметра диапазон должен измеряться в пикселях. Отступ применяется до остальных изменений, в том числе свойств zero, nice, domainMin и domainMax.
nice Boolean | Number | Signal Расширяет область определения до удобных округлённых границ (по умолчанию false). Обычно границы могут только расширяться до ближайших круглых значений. Это полезно, когда область вычисляется из данных и имеет неудобные границы: например, [0.201479…, 0.996679…] может стать [0.2, 1.0]. Значения domainMin и domainMax округляются, а domainRaw — нет. Число в этом свойстве задаёт желаемое количество делений и позволяет точнее управлять шагом так, чтобы деления покрывали всю область определения.
zero Boolean Логический признак включения нуля в область определения. По умолчанию true для linear, sqrt и pow, для остальных шкал — false.

Линейные шкалы

Линейные шкалы (linear) — количественные шкалы, сохраняющие пропорции между значениями. Выходное значение y выражается через значение области определения x линейной функцией: y = mx + b.

Логарифмические шкалы

Логарифмические шкалы (log) — количественные шкалы, которые перед вычислением выходного значения применяют к входному значению логарифм. Они особенно полезны для данных, различающихся на несколько порядков. Выходное значение y выражается через входное x функцией: y = m log(x) + b.

Поскольку log(0) = −∞, область определения логарифмической шкалы должна состоять только из положительных или только из отрицательных значений: она не может содержать ноль или пересекать его. Шкала с положительной областью корректно обрабатывает положительные значения, а с отрицательной — отрицательные. Во втором случае входное и выходное значения неявно умножаются на −1. Поведение шкалы не определено, если передать отрицательное значение шкале с положительной областью или наоборот.

Свойство Тип Описание
base Number Основание логарифма (по умолчанию 10).

Степенные шкалы

Степенные шкалы (pow) — количественные шкалы, возводящие входное значение в степень перед вычислением выходного. Значение y выражается через x функцией y = mx^k + b, где k — показатель степени. Поддерживаются и отрицательные значения области определения: в этом случае входное и полученное выходное значения умножаются на −1.

Свойство Тип Описание
exponent Number Показатель степени для преобразования (по умолчанию 1).

Шкалы квадратного корня

Шкала квадратного корня (sqrt) — сокращённая запись степенной шкалы с показателем 0.5.

Симметричные логарифмические шкалы ≥ 5.0

Симметричные логарифмические шкалы (symlog) — количественные шкалы, похожие на логарифмические, но поддерживающие ноль и отрицательные числа. Они полезны для данных, различающихся на несколько порядков и содержащих неположительные значения. Подробнее см. работу Уэббера «A bi-symmetric log transformation for wide-range data».

Свойство Тип Описание
constant Number Константа, определяющая наклон функции symlog вблизи нуля (по умолчанию 1).

Шкалы времени и UTC

Шкалы времени (time и utc) — количественные шкалы с временной областью определения. Входные значения должны быть объектами Date или временными метками. Тип time использует текущий местный часовой пояс, а utc — всемирное координированное время. Для обоих типов domain по умолчанию равен [2000-01-01, 2000-01-02], а единичный range — [0, 1].

Свойство Тип Описание
nice String | Object | Number | Boolean Если задано, расширяет область определения до удобных для чтения границ. У шкал time и utc можно передать строку с интервалом времени: "millisecond", "second", "minute", "hour", "day", "week", "month" или "year". Можно также задать объект вида {"interval": "month", "step": 3} с числом шагов интервала. В этом примере границы выровняются по кварталам (январь, апрель, июль, октябрь).

Последовательные шкалы (устарели)

Последовательные шкалы (sequential) похожи на линейные, но используют фиксированный интерполятор выходного диапазона. Начиная с Vega 5.0 они устарели: вместо sequential следует использовать шкалу linear (или log и другие) с цветовым диапазоном.

Свойство Тип Описание
clamp Boolean Логический признак (по умолчанию false), ограничивающий выходные значения пределами range. Без ограничения входное значение вне domain может при экстраполяции дать результат вне range. При включённом ограничении результат всегда остаётся в диапазоне шкалы.
domainMax Number Задаёт максимум области определения, переопределяя domain.
domainMin Number Задаёт минимум области определения, переопределяя domain.
domainMid Number Добавляет промежуточное значение между минимумом и максимумом области определения из двух границ. Полезно для задания середины расходящейся цветовой шкалы.
range Схема | Color[ ] Обязательно. Значение range должно быть объектом цветовой схемы или массивом строк цветов. В последнем случае цвета создают непрерывный интерполятор с линейной интерполяцией в пространстве RGB.

Вернуться к типам шкал

Дискретные шкалы

Дискретные шкалы сопоставляют значения дискретной области определения с дискретным диапазоном. У шкал band и point дискретные выходные значения получаются из непрерывного числового диапазона.

Порядковые шкалы

Порядковые шкалы (ordinal) имеют дискретные область определения и диапазон. Например, они могут сопоставлять категориям цвета или формы. Такая шкала работает как таблица соответствия между входными и выходными значениями.

Свойство Тип Описание
domainImplicit Boolean Логический признак (по умолчанию false), разрешающий автоматически дополнять порядковую область определения новыми значениями. При false для отсутствующих значений шкала возвращает undefined. При true новое значение добавляется в область определения и возвращается соответствующее значение диапазона.

Здесь порядковая шкала кодирует категории цветом, используя до 20 разных цветов:

{
  "scales": [
    {
      "name": "color",
      "type": "ordinal",
      "domain": {"data": "table", "field": "category"},
      "range": {"scheme": "category20"}
    }
  ]
}

Интервальные шкалы band

Шкалы band, как и порядковые шкалы, принимают дискретную область определения, но размещают её значения в непрерывном числовом диапазоне, например в пикселях. Шкала делит этот диапазон на равномерные полосы и автоматически вычисляет дискретные выходные значения. Такой тип обычно используют в столбчатых диаграммах с порядковой или категориальной осью.

Вместо обычного числового range, например [0, 500], шкале band можно задать фиксированный step для каждой полосы. Тогда итоговый диапазон зависит от шага и числа элементов входной области. Шаг задаётся объектом со свойством step в пикселях, например "range": {"step": 20}.

Иллюстрация из документации d3-scale показывает работу шкалы band:

Свойство Тип Описание
align Number Выравнивание полос внутри диапазона шкалы, число от 0 до 1. Значение 0.5 (по умолчанию) размещает полосы по центру. Значения 0 и 1 сдвигают их к одному из краёв, например вплотную к оси. Подробнее см. описание выравнивания полос в d3-scale.
padding Number Задаёт одинаковое значение paddingInner и paddingOuter (по умолчанию 0). Допустимый диапазон — [0, 1].
paddingInner Number Внутренний отступ между полосами как доля шага (по умолчанию 0). Допустимый диапазон — [0, 1].
paddingOuter Number Внешний отступ у краёв диапазона как доля шага (по умолчанию 0). Допустимый диапазон — [0, 1].

Точечные шкалы

Точечные шкалы (point) — вариант шкал band с нулевой шириной полосы. Их часто используют в диаграммах рассеяния с порядковым или категориальным измерением. Как и у band, range можно задать числовыми границами ([0, 500]) или шагом ({"step": 20}). Поскольку у точек нет внутренней ширины полосы, свойство paddingInner не поддерживается.

Иллюстрация из документации d3-scale показывает работу шкалы point:

Свойство Тип Описание
align Number Выравнивание точек внутри диапазона шкалы, число от 0 до 1. Значение 0.5 (по умолчанию) размещает точки по центру. Значения 0 и 1 сдвигают их к одному из краёв, например вплотную к оси.
padding Number Псевдоним paddingOuter (по умолчанию 0). Допустимый диапазон — [0, 1].
paddingOuter Number Внешний отступ у краёв диапазона как доля шага (по умолчанию 0). Допустимый диапазон — [0, 1].

Вернуться к типам шкал

Шкалы дискретизации

Шкалы дискретизации разбивают непрерывную область определения на отдельные интервалы и сопоставляют каждому интервалу значение диапазона.

Квантильные шкалы

Квантильные шкалы (quantile) сопоставляют выборку входных значений с дискретным диапазоном по вычисленным границам квантилей. Область определения считается непрерывной, поэтому шкала принимает любое допустимое входное значение, хотя сама область задаётся дискретной выборкой. Число значений в выходном диапазоне определяет число квантилей. Для их вычисления выборка сортируется, а полученные границы делят её на группы примерно с одинаковым числом точек.

Квантильные шкалы полезны для кодирования цветом или размером с фиксированным числом выходных значений. Дискретные уровни — обычно 5–9 цветов или размеров — иногда легче сравнивать визуально, чем значения непрерывного диапазона. Родственные шкалы quantize делят область определения на интервалы одинаковой ширины, а не на группы с примерно равным числом записей. Преимущество квантильной шкалы — более равномерное распределение точек по выходным значениям; quantize этого не гарантирует.

В этом примере значения делятся на пять квантильных групп, цвета для которых выбираются из непрерывной схемы:

{
  "name": "color",
  "type": "quantile",
  "domain": {"data": "table", "field": "value"},
  "range": {"scheme": "plasma", "count": 5}
}

Шкалы квантования

Шкалы квантования (quantize) похожи на линейные, но используют дискретный выходной диапазон. Непрерывная входная область делится на интервалы одинаковой ширины по числу значений выходного диапазона. Каждый такой интервал сопоставляется одному значению выходного диапазона.

Шкалы quantize полезны для кодирования цветом или размером с фиксированным числом значений. Дискретные уровни — обычно 5–9 цветов или размеров — иногда легче сравнивать визуально, чем непрерывный диапазон. См. также квантильные шкалы, делящие данные на группы с примерно равным числом элементов, а не на интервалы одинаковой ширины.

Свойство Тип Описание
nice Boolean | Number Расширяет область определения до удобных округлённых границ (по умолчанию false). Обычно границы только расширяются до ближайших круглых значений. Это полезно, когда область вычисляется из данных: например, [0.201479…, 0.996679…] может стать [0.2, 1.0]. Значения domainMin и domainMax округляются, а domainRaw — нет. Число в этом свойстве задаёт желаемое количество делений и позволяет точнее управлять шагом так, чтобы деления покрывали всю область определения.
zero Boolean Логический признак включения нуля в область определения (по умолчанию false).

В этом примере область кодируется семью цветами из цветовой схемы:

{
  "name": "color",
  "type": "quantize",
  "domain": {"data": "table", "field": "value"},
  "range": {"scheme": "blues", "count": 7}
}

Пороговые шкалы

Пороговые шкалы (threshold) похожи на шкалы quantize, но сопоставляют выходные значения произвольным интервалам области определения, а не только равным по ширине. Непрерывная входная область делится порогами, заданными в domain. Свойство range должно содержать N + 1 значение, где N — число порогов в domain.

Пусть задана следующая шкала:

{
  "name": "threshold",
  "type": "threshold",
  "domain": [0, 1],
  "range": ["red", "white", "blue"]
}

Тогда входные значения преобразуются в цвета следующим образом:

-1   => "red"
0    => "white"
0.5  => "white"
1.0  => "blue"
1000 => "blue"

Интервальные порядковые шкалы

Интервальные порядковые шкалы (bin-ordinal) — разновидность порядковой шкалы для данных, разделённых на интервалы, например преобразованием bin. Их преимущество — учёт границ интервалов при выборе значений и создании подписей для легенд. Особенно полезны они для интервального кодирования цветом.

Область domain такой шкалы должна содержать все границы интервалов — от начала первого до конца последнего. Входное значение относится к соответствующему интервалу, который затем обрабатывается как значение обычной порядковой шкалы. Поскольку domain принимает только массив значений, у bin-ordinal есть также свойство bins: оно может принимать спецификацию интервалов и заменять явное указание domain.

Свойство Тип Описание
bins Интервалы ≥ 5.0 Границы интервалов области определения, например вычисленные преобразованием bin. Можно задать массив границ или объект спецификации; подробнее см. описание интервалов шкал. Если domain не задано, область определения определяется по bins.

Пример шкалы bin-ordinal вместе с преобразованием bin:

{
  "data": [
    {
      "name": "input",
      "transform": [
        { "type": "extent", "field": "value", "signal": "extent" },
        { "type": "bin", "field": "value", "extent": {"signal": "extent"}, "signal": "bins" }
      ]
    }
  ],
  "scales": [
    {
      "name": "color",
      "type": "bin-ordinal",
      "bins": {"signal": "bins"},
      "range": {"scheme": "greens"}
    }
  ]
}

Вернуться к типам шкал

Интервалы шкал

Границы интервалов можно задать массивом или объектом спецификации. Допускаются следующие варианты:

  • Ссылка на сигнал, возвращающий массив или объект спецификации интервалов.
  • Литеральный массив границ, например [0, 5, 10, 15, 20]. Он должен включать начальную и конечную границы. В этом примере пять значений образуют четыре интервала: [0–5), [5–10), [10–15) и [15–20]. Элементами массива могут быть ссылки на сигналы.
  • Объект спецификации с шириной интервала step и необязательными границами start и stop. Результат преобразования bin является допустимым таким объектом.
Свойство Тип Описание
start Number Начальная (минимальная) граница интервалов. Если не задана, используется минимум области определения шкалы.
stop Number Конечная (максимальная) граница интервалов. Если не задана, используется максимум области определения шкалы.
step Number Обязательно. Шаг, определяющий ширину интервала.

Области определения шкал

Область определения шкалы можно задать несколькими способами:

  • Литеральным массивом значений, например [0, 500] или ['a', 'b', 'c']. Его элементами могут быть ссылки на сигналы.
  • Ссылкой на сигнал, возвращающий массив значений области определения, например {"signal": "myDomain"}.
  • Объектом ссылки на данные, указывающим значения полей одного или нескольких наборов данных.

Простая ссылка на данные

Простая ссылка на данные указывает набор данных, имя поля и необязательную сортировку для дискретных шкал:

Свойство Тип Описание
data String Обязательно. Имя набора данных со значениями области определения.
field Field Обязательно. Имя поля данных, например "price".
sort Boolean | Сортировка При логическом значении true сортирует область определения по возрастанию. Объект задаёт параметры сортировки. Сортировка поддерживается только для дискретных шкал.

Например, "domain": {"data": "table", "field": "value"} строит область определения по полю value записей набора table. У количественной шкалы или quantize результатом будет массив из минимума и максимума. У дискретной — массив всех различных значений. У quantile все значения используются для вычисления границ квантилей.

Ссылки на несколько полей данных

Область определения шкалы можно построить по нескольким полям. Для полей одного набора данных замените field свойством fields с массивом имён полей:

Свойство Тип Описание
data String Обязательно. Имя набора данных со значениями области определения.
fields Field[ ] Обязательно. Имена полей данных, например ["price", "cost"].
sort Boolean | Сортировка При логическом значении true сортирует область определения по возрастанию. Объект задаёт параметры сортировки. Сортировка поддерживается только для дискретных шкал.

Область определения может использовать значения из разных наборов данных. Тогда объект области должен содержать свойство fields — массив простых ссылок на данные:

Свойство Тип Описание
fields DataRef[ ] Обязательно. Массив простых ссылок на данные, задающих наборы и поля для области определения. Элементами fields также могут быть литеральные массивы, например [0, 100] или ["a", "b", "c"].
sort Boolean | Сортировка При логическом значении true сортирует область определения по возрастанию. Объект задаёт параметры сортировки. Сортировка поддерживается только для дискретных шкал.

Пример области определения из полей price и cost двух разных наборов данных:

"domain": {
  "fields": [
    {"data": "table1", "field": "price"},
    {"data": "table2", "field": "cost"}
   ]
}

Сортировка области определения

Свойство sort в ссылке на данные может принимать не только логическое значение, но и объект с правилами сортировки:

Свойство Тип Описание
field Field Поле, по которому выполняется сортировка. По умолчанию — поле внешней ссылки на данные.
op String Агрегатная операция над полем перед сортировкой, например count, mean или median. Обязательна, если поле сортировки sort.field отличается от field ссылки на данные. Входные записи группируются по значениям field и агрегируются. Полный список операций см. в преобразовании aggregate; ограничения для нескольких полей приведены ниже.
order String Порядок сортировки: ascending (по умолчанию) или descending.

Этот пример сортирует различные значения поля category по убыванию медианы связанного поля value:

{
  "domain": {
    "data": "table",
    "field": "category",
    "sort": {"op": "median", "field": "value", "order": "descending"}
  }
}

Здесь область из нескольких полей сортируется по убыванию частоты каждого значения:

{
  "domain": {
    "data": "table",
    "fields": ["category1", "category2"],
    "sort": {"op": "count", "order": "descending"}
  }
}

Примечание: при области определения из нескольких полей значения сортируемого field могут отсутствовать в части входных наборов данных или повторяться при получении нескольких значений из одного набора. Чтобы избежать неверной сортировки, для таких шкал допускаются только операции op count, min и max. Поддержка min и max появилась в версии ≥ 5.5.

Диапазоны шкал

Диапазон шкалы можно задать несколькими способами:

Диапазоны по умолчанию

Диапазон шкалы может быть строкой, обозначающей значение по умолчанию. С помощью конфигурации эти значения можно изменить и добавить новые именованные диапазоны.

Значение Описание
"width" Пространственный диапазон, определяемый значением сигнала width.
"height" Пространственный диапазон, определяемый сигналом height. Направление — сверху вниз или снизу вверх — выбирается автоматически по типу шкалы.
"symbol" Набор символов по умолчанию для кодирования формой.
"category" Категориальная цветовая схема по умолчанию для номинальных данных.
"diverging" Расходящаяся цветовая схема по умолчанию для количественных данных.
"ordinal" Последовательная цветовая схема по умолчанию для порядковых данных.
"ramp" Последовательная цветовая схема по умолчанию для количественных данных.
"heatmap" Последовательная цветовая схема по умолчанию для количественных тепловых карт.