Преобразование 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]"}
        }
      ]
    }
  ]
}