Легенды
Легенды показывают, как шкалы сопоставляют значения данных с визуальными свойствами: цветом, формой и размером. Как и шкалы с осями, легенды можно задавать на верхнем уровне визуализации или внутри группового примитива.
Свойства легенды
Легенде можно передать одну или несколько шкал. Обязательно укажите хотя бы одно из свойств 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 в пользовательском блоке кодировки.