Преобразование label
Преобразование label ≥ 5.16 размещает текстовые примитивы так, чтобы подписи не перекрывали друг друга и другие элементы диаграммы. Его следует применять к примитиву text, получающему данные от подписываемого базового примитива через реактивную геометрию. Чтобы подписать линию или область целиком, а не каждую её точку, базовым должен быть групповой примитив, содержащий эти линии или области.
Параметры преобразования
| Свойство | Тип | Описание |
|---|---|---|
| size | Number[ ] | Обязательно. Размер диаграммы в виде массива [width, height]. |
| anchor | String | String[ ] | Порядок проверки точек привязки подписи относительно прямоугольной границы базового примитива: "top-left", "left", "bottom-left", "top", "bottom", "top-right", "right", "bottom-right", "middle". По умолчанию проверяются все, кроме "middle". Можно задать массив или одну точку. |
| avoidMarks | String[ ] | Имена примитивов, которые подписи не должны перекрывать (по умолчанию список пуст). |
| avoidBaseMark | Boolean | Не перекрывать ли подписью базовый примитив (по умолчанию true). |
| lineAnchor | String | Точка привязки подписи линии, когда всей линии соответствует одна подпись: "start" или "end" (по умолчанию). Используется только для базовой группы, содержащей линии. |
| markIndex | Number | Индекс примитива внутри базовой группы (по умолчанию 0), который нужно подписать. Используется только тогда, когда базовым примитивом служит группа. |
| method | String | Способ размещения подписей областей: "floodfill", "reduced-search" или "naive" (по умолчанию). Используется только для базовой группы, содержащей области. |
| offset | Number | Number[ ] | Отступы подписей в пикселях для каждой точки привязки относительно границы базового примитива (по умолчанию 1). Одно число задаёт одинаковый отступ для всех. |
| padding | Number | Допустимый выход подписи за прямоугольные границы диаграммы в пикселях (по умолчанию 0). |
| sort | Field | Поле, задающее порядок размещения подписей по возрастанию. |
| as | String[ ] | Имена выходных полей (по умолчанию ["x", "y", "opacity", "align", "baseline"]). |
Использование
Фрагмент примера диаграммы рассеяния с подписями применяет label к текстовому примитиву, который получает данные от примитива symbol с именем "points". Параметр avoidMarks дополнительно запрещает подписям перекрывать линейный примитив "trend".
{
"marks": [
{
"name": "points",
"type": "symbol",
"from": {"data": "movies"},
"encode": {
"enter": {
"x": {"scale": "x", "field": "Rotten Tomatoes Rating"},
"y": {"scale": "y", "field": "IMDB Rating"},
"size": {"value": 25},
"fillOpacity": {"value": 0.5}
}
}
},
{
"name": "trend",
"type": "line",
"from": {"data": "fit"},
"encode": {
"enter": {
"x": {"scale": "x", "field": "u"},
"y": {"scale": "y", "field": "v"},
"stroke": {"value": "firebrick"}
}
}
},
{
"type": "text",
"from": {"data": "points"},
"encode": {
"enter": {
"text": {"field": "datum.Title"},
"fontSize": {"value": 8}
}
},
"transform": [
{
"type": "label",
"avoidMarks": ["trend"],
"anchor": ["top", "bottom", "right", "left"],
"offset": [1],
"size": {"signal": "[width + 60, height]"}
}
]
}
]
}