Визуальные примитивы Vega и Vega-Lite строятся на основе графических
marks: rect, symbol, line,
area, arc, text,
trail и других. Для управления внешним видом этих объектов
используются свойства заливки и обводки. Центральную роль здесь играют
поля filled и stroke.
Эти параметры определяют:
filledПоле filled определяет, должен ли mark использовать
внутреннюю заливку (fill) или только обводку
(stroke).
Тип значения:
filled: true | false
По умолчанию:
filled: true
filledЕсли:
filled: true
то объект использует свойство fill.
Если:
filled: false
то заливка отключается, а цвет mark берётся из
stroke.
filled: true{
"mark": {
"type": "point",
"filled": true,
"fill": "steelblue"
}
}
Результат:
fill;filled: false{
"mark": {
"type": "point",
"filled": false,
"stroke": "red"
}
}
Результат:
pointДля point параметр filled особенно
важен.
{
"mark": {
"type": "point",
"filled": true,
"fill": "green",
"size": 100
}
}
Точка выглядит как закрашенный круг.
{
"mark": {
"type": "point",
"filled": false,
"stroke": "green",
"strokeWidth": 2,
"size": 100
}
}
Точка отображается как кольцо.
fill и
filledЭти параметры часто путают.
fillОпределяет цвет внутренней области:
fill: "orange"
filledОпределяет, используется ли вообще внутренняя заливка:
filled: false
fill{
"mark": {
"type": "point",
"fill": "blue"
}
}
Точка закрашена.
filled: false{
"mark": {
"type": "point",
"filled": false,
"fill": "blue",
"stroke": "red"
}
}
fill игнорируется.
Отображается только красная обводка.
filled: falseПолые точки хорошо подходят для:
{
"mark": {
"type": "point",
"filled": false,
"stroke": "#333"
}
}
Подобный стиль часто применяется:
При большом количестве точек закрашенные marks могут сливаться.
Полые элементы:
strokeПоле stroke задаёт цвет обводки.
Тип:
stroke: "<color>"
Примеры:
stroke: "black"
stroke: "#ff0000"
stroke: "rgb(0,0,255)"
{
"mark": {
"type": "rect",
"fill": "lightblue",
"stroke": "darkblue"
}
}
Результат:
stroke
без fill{
"mark": {
"type": "circle",
"fill": null,
"stroke": "red"
}
}
Фигура становится прозрачной внутри.
stroke и strokeWidthЦвет обводки почти всегда используется вместе с толщиной линии.
{
"mark": {
"type": "rect",
"stroke": "black",
"strokeWidth": 3
}
}
strokeWidthОпределяет толщину границы:
strokeWidth: 2
Единица измерения — пиксели.
{
"stroke": "black",
"strokeWidth": 1
}
{
"stroke": "black",
"strokeWidth": 6
}
Толстая граница:
strokeOpacityПозволяет регулировать прозрачность контура.
{
"mark": {
"type": "point",
"filled": false,
"stroke": "red",
"strokeOpacity": 0.4
}
}
Диапазон:
0 → полностью прозрачно
1 → полностью непрозрачно
strokeDashСоздаёт пунктирную линию.
{
"mark": {
"type": "line",
"stroke": "black",
"strokeDash": [4, 2]
}
}
Интерпретация:
4px линия
2px пробел
strokeCapОпределяет форму концов линии.
Варианты:
"butt"
"round"
"square"
{
"mark": {
"type": "line",
"stroke": "blue",
"strokeWidth": 8,
"strokeCap": "round"
}
}
strokeJoinУправляет соединениями сегментов линии.
Варианты:
"miter"
"round"
"bevel"
{
"mark": {
"type": "line",
"stroke": "black",
"strokeJoin": "round"
}
}
stroke в line chartsДля line обводка является основным способом
отображения.
{
"mark": {
"type": "line",
"stroke": "steelblue",
"strokeWidth": 2
}
}
stroke в area chartsУ area-графиков можно отдельно настроить:
{
"mark": {
"type": "area",
"fill": "lightblue",
"stroke": "blue"
}
}
stroke в bar charts{
"mark": {
"type": "bar",
"fill": "#90caf9",
"stroke": "#1565c0",
"strokeWidth": 1
}
}
Контур помогает:
filled в
Vega-LiteВ Vega-Lite свойство особенно распространено для:
point;circle;square.{
"data": {
"values": [
{"x": 1, "y": 2},
{"x": 2, "y": 3},
{"x": 3, "y": 5}
]
},
"mark": {
"type": "point",
"filled": false,
"stroke": "darkred",
"strokeWidth": 2
},
"encoding": {
"x": {"field": "x", "type": "quantitative"},
"y": {"field": "y", "type": "quantitative"}
}
}
strokeОбводку можно привязать к данным.
{
"encoding": {
"stroke": {
"field": "category",
"type": "nominal"
}
}
}
Каждая категория получает собственный цвет контура.
fill{
"encoding": {
"fill": {
"field": "group",
"type": "nominal"
}
}
}
fill и
strokeОдин из самых распространённых приёмов.
{
"mark": {
"type": "point",
"fill": "white",
"stroke": "blue",
"strokeWidth": 2
}
}
Результат:
fill{
"mark": {
"type": "point",
"fill": "transparent",
"stroke": "red"
}
}
fill: null и filled: falsefill: null{
"fill": null
}
Убирает цвет заливки.
filled: false{
"filled": false
}
Переключает механизм рендеринга на использование
stroke.
Это более корректный способ создания hollow-point.
{
"mark": {
"type": "point",
"filled": true,
"fill": "orange"
}
}
{
"mark": {
"type": "point",
"filled": false,
"stroke": "orange"
}
}
Большое количество сложных обводок может влиять на производительность.
Особенно затратны:
strokeWidth;strokeDash;При экспорте в SVG свойства stroke и fill
напрямую превращаются в SVG-атрибуты:
fill="blue"
stroke="black"
stroke-width="2"
Это делает Vega совместимой с:
При использовании Canvas Vega транслирует свойства в Canvas API:
context.fillStyle
context.strokeStyle
context.lineWidth
Поля можно изменять условно.
{
"encoding": {
"stroke": {
"condition": {
"test": "datum.value > 100",
"value": "red"
},
"value": "gray"
}
}
}
{
"selection": {
"hover": {
"type": "single",
"on": "mouseover"
}
},
"encoding": {
"strokeWidth": {
"condition": {
"selection": "hover",
"value": 4
},
"value": 1
}
}
}
filled: falseПодходит для:
strokeКонтур полезен:
Слишком большой strokeWidth:
fill без
filled{
"filled": false,
"fill": "blue"
}
fill не будет использоваться.
stroke{
"filled": false
}
Объект может стать невидимым.
{
"strokeOpacity": 0.05
}
Контур почти исчезает.
| Стиль | Настройки |
|---|---|
| Закрашенные точки | filled: true + fill |
| Полые точки | filled: false + stroke |
| Минимализм | тонкий stroke |
| Акцент | толстый strokeWidth |
| Научная визуализация | hollow points |
| Dashboard | умеренный stroke |
| Свойство | Назначение |
|---|---|
filled |
Использовать ли внутреннюю заливку |
fill |
Цвет внутренней области |
fillOpacity |
Прозрачность заливки |
stroke |
Цвет контура |
strokeWidth |
Толщина контура |
strokeOpacity |
Прозрачность контура |
strokeDash |
Пунктир |
strokeCap |
Форма концов линии |
strokeJoin |
Соединение сегментов |