Легенды

Легенды показывают, как шкалы сопоставляют значения данных с визуальными свойствами: цветом, формой и размером. Как и шкалы с осями, легенды можно задавать на верхнем уровне визуализации или внутри группового примитива.

Свойства легенды

Легенде можно передать одну или несколько шкал. Обязательно укажите хотя бы одно из свойств size, shape, fill, stroke, strokeDash или opacity. Если задано несколько шкал, у них должна быть одинаковая область определения входных значений. Иначе поведение легенды не определено.

Свойство Тип Описание
type String Тип легенды: "symbol" — отдельные условные знаки, "gradient" — непрерывный цветовой градиент, "discrete" — ступенчатый цветовой градиент. Для градиентных типов учитываются только шкалы fill и stroke. Если тип не задан, он определяется по указанным шкалам и их типам.
direction String Направление легенды: "vertical" (по умолчанию) или "horizontal".
orient String Расположение легенды относительно области данных диаграммы (по умолчанию right). См. справочник по расположению легенд.
fill String Имя шкалы, определяющей цвет заливки.
opacity String Имя шкалы, определяющей непрозрачность.
shape String Имя шкалы, определяющей форму.
size String Имя шкалы, определяющей размер (площадь).
stroke String Имя шкалы, определяющей цвет обводки.
strokeDash String Имя шкалы, определяющей штриховой узор обводки.
strokeWidth String Имя шкалы, определяющей толщину обводки. ≥ 5.0
encode Object Необязательные кодировки примитивов для настройки оформления легенды. Поддерживаются блоки legend, title, entries, labels, symbols и gradient. См. пользовательские кодировки легенды.
format String | TimeMultiFormat Шаблон форматирования подписей легенды. Для чисел используется допустимый спецификатор d3-format, для даты и времени — спецификатор d3-time-format или объект TimeMultiFormat.
formatType String Тип форматирования ("number", "time", "utc") для шкал без строго заданного типа данных области определения. Полезен для форматирования дат и времени в порядковых шкалах. Если задан, свойство format должно содержать подходящий для выбранного типа шаблон. Поддерживается ≥ 5.1; поддержка UTC — ≥ 5.8.
gridAlign String Выравнивание строк и столбцов легенды условных знаков: all, each (по умолчанию) или none. Подробнее см. раздел о сеточном размещении.
clipHeight Number Высота в пикселях для обрезки элементов легенды условных знаков и ограничения их размера. По умолчанию обрезка не применяется.
columns Number Число столбцов для элементов легенды условных знаков. 0 или отрицательное значение размещает все элементы в одну строку. По умолчанию 0 для горизонтальной легенды и 1 для вертикальной.
columnPadding Number Горизонтальный отступ между элементами легенды условных знаков в пикселях.
rowPadding Number Вертикальный отступ между элементами легенды условных знаков в пикселях.
cornerRadius Number Радиус скругления углов всей легенды.
fillColor Color Цвет фона всей легенды.
offset Number | Value Расстояние в пикселях между легендой, областью данных и осями. Заданное значение переопределяет конфигурацию легенд. Если для нескольких легенд с одинаковым orient указаны разные значения offset, используется наибольшее.
padding Number | Value Внутренний отступ между рамкой и содержимым группы легенды.
strokeColor Color Цвет рамки всей легенды.
gradientLength Number Длина основной оси цветового градиента в пикселях: высота вертикального или ширина горизонтального градиента.
gradientOpacity Number Непрозрачность цветового градиента. ≥ 4.1
gradientThickness Number Толщина цветового градиента в пикселях: ширина вертикального или высота горизонтального градиента.
gradientStrokeColor Color Цвет рамки цветового градиента.
gradientStrokeWidth Number Толщина рамки цветового градиента.
labelAlign String Выравнивание текста подписей легенды по горизонтали.
labelBaseline String Вертикальное положение базовой линии подписей: alphabetic, top, middle, bottom, line-top или line-bottom. Значения line-top и line-bottom ≥ 5.10 действуют подобно top и bottom, но учитывают lineHeight, а не только fontSize. Если значение не задано, положение выбирается автоматически: для легенды условных знаков используется middle, а для градиентной легенды оно зависит от направления и положения подписи.
labelColor Color Цвет текста подписей легенды.
labelFont String Название шрифта подписей легенды.
labelFontSize Number Размер шрифта подписей легенды в пикселях.
labelFontStyle String Начертание шрифта подписей, например normal или italic. ≥ 5.0
labelFontWeight String | Number Насыщенность шрифта подписей легенды.
labelLimit Number Максимальная длина подписей легенды в пикселях.
labelOffset Number Расстояние в пикселях между подписью легенды и соответствующим условным знаком или градиентом.
labelOpacity Number Непрозрачность подписей легенды. ≥ 4.1
labelOverlap Boolean | String Способ устранения наложения подписей в градиентной легенде. При false наложения не устраняются. Значение true (по умолчанию) или "parity" убирает каждую вторую подпись. Значение "greedy" последовательно убирает подписи, перекрывающие последнюю оставленную.
labelSeparation Number Минимальное расстояние между ограничивающими прямоугольниками подписей, при котором они не считаются перекрывающимися (по умолчанию 0). Учитывается только при включённом устранении наложений через labelOverlap. ≥ 5.0
legendX Number Координата x группы легенды в пикселях. Применяется только при orient со значением "none". ≥ 5.4
legendY Number Координата y группы легенды в пикселях. Применяется только при orient со значением "none". ≥ 5.4
symbolDash Number[ ] Штриховой узор обводки условных знаков; [] задаёт сплошные линии. ≥ 5.0
symbolDashOffset Number Смещение начала штрихового узора условных знаков в пикселях. ≥ 5.0
symbolFillColor Color Цвет заливки условных знаков легенды.
symbolLimit Number Максимальное число элементов легенды условных знаков. Лишние элементы удаляются и заменяются многоточием. ≥ 5.7
symbolOffset Number Горизонтальное смещение условных знаков легенды в пикселях.
symbolOpacity Number Непрозрачность условных знаков легенды. ≥ 4.1
symbolSize Number Площадь условного знака по умолчанию (в пикселях2).
symbolStrokeColor Color Цвет обводки условных знаков легенды.
symbolStrokeWidth Number Толщина обводки условных знаков легенды по умолчанию.
symbolType String Форма примитива symbol для условных знаков легенды по умолчанию, например "circle".
tickCount Number | String | Object Желаемое число делений для количественной легенды. Для шкал time и utc вместо числа можно указать интервал: "millisecond", "second", "minute", "hour", "day", "week", "month" или "year". Объект {"interval": "month", "step": 3} задаёт шаг в три месяца: деления появляются в начале каждого квартала (январь, апрель, июль, октябрь).
tickMinStep Number Минимальный желаемый шаг между делениями количественной легенды в единицах области определения шкалы. Например, 1 не допускает расстояния между делениями меньше единицы. При необходимости tickCount корректируется для соблюдения этого шага. ≥ 5.0
title String | String[ ] Заголовок легенды (по умолчанию отсутствует). Начиная с версии ≥ 5.7, массив строк задаёт многострочный заголовок.
titleAnchor String Точка привязки заголовка: "start", "middle", "end" или null (по умолчанию, определяется автоматически). Например, при titleOrient со значением "top" они задают выравнивание слева, по центру и справа относительно содержимого легенды. ≥ 5.0
titleAlign String Выравнивание заголовка по горизонтали: "left", "center" или "right". Переопределяет автоматическое выравнивание по titleOrient и titleAnchor.
titleBaseline String Вертикальное положение базовой линии заголовка: alphabetic, top, middle, bottom, line-top или line-bottom. Значения line-top и line-bottom ≥ 5.10 действуют подобно top и bottom, но учитывают lineHeight, а не только fontSize. По умолчанию положение определяется автоматически по titleOrient и titleAnchor; заданное значение переопределяет этот выбор.
titleColor Color Цвет текста заголовка легенды.
titleFont String Название шрифта заголовка легенды.
titleFontSize Number Размер шрифта заголовка легенды в пикселях.
titleFontStyle String Начертание шрифта заголовка, например normal или italic. ≥ 5.0
titleFontWeight String | Number Насыщенность шрифта заголовка легенды.
titleLimit Number Максимальная длина заголовка легенды в пикселях.
titleLineHeight Number Высота строки в пикселях для многострочного заголовка или заголовка с базовой линией "line-top" либо "line-bottom". ≥ 5.7
titleOpacity Number Непрозрачность заголовка легенды. ≥ 4.1
titleOrient String Расположение заголовка относительно содержимого легенды: "top" (по умолчанию), "left", "bottom" или "right". ≥ 5.0
titlePadding Number | Value Отступ между заголовком и элементами легенды.
values Array Явно заданные значения видимых элементов легенды. Элементы массива должны входить в область определения соответствующей шкалы.
zindex Number Целочисленный индекс слоя группы легенды относительно других осей, примитивов и легенд. По умолчанию 0.

Свойства доступности ≥ 5.11

При выводе SVG эти свойства определяют атрибуты ARIA, которые помогают вспомогательным технологиям описывать легенду.

Свойство Тип Описание
aria Boolean Добавлять ли атрибуты ARIA (по умолчанию true; только для SVG). При false группе легенды задаётся aria-hidden, и она исключается из дерева доступности ARIA.
description String Текстовое описание легенды для доступности ARIA (только для SVG). Если aria равно true, оно задаётся атрибутом aria-label. Если описание не указано, оно создаётся автоматически.

Темы и конфигурация

Чтобы создавать темы, значения по умолчанию для свойств легенды можно задавать в объекте конфигурации. Там же можно настроить размещение нескольких легенд с одинаковым значением orient.

Расположение легенды

Допустимые значения параметра orient.

Значение Описание
left Слева от диаграммы.
right Справа от диаграммы.
top Над диаграммой.
bottom Под диаграммой.
top-left Внутри диаграммы, в левом верхнем углу.
top-right Внутри диаграммы, в правом верхнем углу.
bottom-left Внутри диаграммы, в левом нижнем углу.
bottom-right Внутри диаграммы, в правом нижнем углу.
none Без автоматического размещения. Координаты задаются свойствами legendX и legendY.

Несколько легенд. Легенды с расположением left или right по умолчанию выстраиваются вертикально, а с расположением top или bottom — горизонтально. При других значениях несколько легенд в одном месте накладываются друг на друга. Размещение можно изменить в конфигурации легенд.

Смещение легенды. Для расположений left, right, top и bottom параметр offset задаёт расстояние до остальной части диаграммы. При none он игнорируется. При остальных значениях задаёт сдвиг легенды от угла области данных внутрь диаграммы.

Пользовательские кодировки легенды

С помощью параметра encode можно настраивать свойства примитивов всех элементов легенды:

  • legend — группа легенды;
  • title — текстовый примитив заголовка;
  • labels — текстовые примитивы подписей;
  • symbols — примитивы условных знаков;
  • entries — группы элементов легенды, каждая из которых содержит условный знак и подпись;
  • gradient — примитивы прямоугольников: один прямоугольник с градиентной заливкой для непрерывной легенды или несколько прямоугольников со сплошной заливкой для ступенчатой.

Каждый элемент принимает набор правил визуального кодирования, сгруппированных в объекты enter, update, exit и другие, как описано в разделе «Примитивы». Для оформления можно использовать стандартные ссылки на значения.

Каждый блок encode также может содержать строковое свойство name для уникального имени набора примитивов, логическое interactive для обработки событий ввода и строковое свойство style (или массив строк) для применения значений свойств по умолчанию. Если не указано иное, для заголовка используется стиль "guide-title", а для подписей — "guide-label".

Каждому условному знаку и подписи легенды соответствует объект данных со следующими полями. Их можно использовать в пользовательских правилах визуального кодирования:

  • index — целочисленный индекс;
  • label — текст подписи;
  • value — значение данных;
  • size — размер условного знака (только для легенд условных знаков).

В примере ниже показано, как задать собственные шрифты и рамку легенды для шкалы цвета заливки. Блок labels также делает подписи чувствительными к событиям ввода и меняет цвет текста при наведении указателя.

"legends": [
  {
    "fill": "color",
    "encode": {
      "title": {
        "update": {
          "fontSize": {"value": 14}
        }
      },
      "labels": {
        "interactive": true,
        "update": {
          "fontSize": {"value": 12},
          "fill": {"value": "black"}
        },
        "hover": {
          "fill": {"value": "firebrick"}
        }
      },
      "symbols": {
        "update": {
          "stroke": {"value": "transparent"}
        }
      },
      "legend": {
        "update": {
          "stroke": {"value": "#ccc"},
          "strokeWidth": {"value": 1.5}
        }
      }
    }
  }
]

Для labels можно задать собственный текст через свойство text. Например, порядковая шкала может служить таблицей соответствия между базовым value и текстом подписи легенды. Чтобы вручную расположить легенду с orient равным none, используйте свойства верхнего уровня legendX и legendY, а не свойства x и y в пользовательском блоке кодировки.