Тип визуализации area в Vega-Lite предназначен для
построения областных диаграмм — графиков, в которых пространство между
линией и базовой осью заполняется цветом. По умолчанию область
представляет собой сплошную фигуру, однако во многих случаях требуется
дополнительно отобразить контур верхней границы. Для этого используется
поле line.
Поле line управляет отображением линии поверх области и
позволяет объединить преимущества двух типов графиков:
lineПростейший пример:
{
"data": {
"values": [
{"x": 1, "y": 10},
{"x": 2, "y": 20},
{"x": 3, "y": 15},
{"x": 4, "y": 30}
]
},
"mark": {
"type": "area",
"line": true
},
"encoding": {
"x": {"field": "x", "type": "quantitative"},
"y": {"field": "y", "type": "quantitative"}
}
}
Здесь:
"line": true
включает автоматическое рисование линии вдоль верхней границы области.
Без этого свойства отображалась бы только залитая фигура.
line"mark": "area"
Результат:
line"mark": {
"type": "area",
"line": true
}
Результат:
lineПоле особенно полезно в следующих сценариях:
Например:
Область показывает объём, а линия подчёркивает изменение показателя.
Если область имеет:
то границы могут сливаться с фоном. Линия делает контур различимым.
При использовании нескольких серий линия помогает отделить графики друг от друга.
При указании:
"line": true
Vega-Lite фактически создаёт дополнительный слой линии поверх area-mark.
То есть визуально получается комбинация:
area;line.Но пользователю не нужно вручную использовать layer.
trueПоле line может быть не только логическим значением, но
и объектом конфигурации.
Пример:
{
"mark": {
"type": "area",
"line": {
"color": "red",
"strokeWidth": 3
}
}
}
Теперь линия:
"line": {
"color": "black"
}
"line": {
"strokeWidth": 2
}
"line": {
"opacity": 0.5
}
"line": {
"strokeDash": [6, 3]
}
Создаёт пунктирную линию.
"line": {
"strokeJoin": "round"
}
Делает переходы между сегментами плавнее.
{
"data": {
"values": [
{"month": "Jan", "value": 12},
{"month": "Feb", "value": 28},
{"month": "Mar", "value": 19},
{"month": "Apr", "value": 35}
]
},
"mark": {
"type": "area",
"color": "#87CEFA",
"opacity": 0.4,
"line": {
"color": "#1E3A8A",
"strokeWidth": 3
}
},
"encoding": {
"x": {
"field": "month",
"type": "ordinal"
},
"y": {
"field": "value",
"type": "quantitative"
}
}
}
line-слояТехнически похожий результат можно получить через
layer.
Пример:
{
"layer": [
{
"mark": "area"
},
{
"mark": "line"
}
]
}
Однако поле line внутри area удобнее:
layerНесмотря на удобство line, отдельный слой полезен,
если:
interpolateПоле line наследует интерполяцию области.
Пример:
{
"mark": {
"type": "area",
"interpolate": "monotone",
"line": true
}
}
Линия станет сглаженной вместе с областью.
"interpolate": "linear"
Прямые сегменты.
"interpolate": "monotone"
Плавный тренд без резких перегибов.
"interpolate": "step"
Ступенчатый график.
"interpolate": "basis"
Сильное сглаживание.
Особенно часто line применяется при работе с датами.
Пример:
{
"data": {
"values": [
{"date": "2024-01-01", "value": 12},
{"date": "2024-01-02", "value": 18},
{"date": "2024-01-03", "value": 25}
]
},
"mark": {
"type": "area",
"line": true
},
"encoding": {
"x": {
"field": "date",
"type": "temporal"
},
"y": {
"field": "value",
"type": "quantitative"
}
}
}
line хорошо работает в stacked area chart.
Пример:
{
"mark": {
"type": "area",
"line": true
},
"encoding": {
"color": {
"field": "category"
}
}
}
Линии помогают визуально различать слои накопления.
Если серий слишком много:
В таких случаях полезны:
"opacity": 0.3
или уменьшение толщины линии.
pointПоле point можно использовать одновременно с
line.
{
"mark": {
"type": "area",
"line": true,
"point": true
}
}
Результат:
{
"data": {
"values": [
{"x": 1, "y": 5},
{"x": 2, "y": 15},
{"x": 3, "y": 10},
{"x": 4, "y": 20}
]
},
"mark": {
"type": "area",
"opacity": 0.5,
"line": {
"color": "darkblue",
"strokeWidth": 2
},
"point": {
"filled": true,
"size": 80
}
},
"encoding": {
"x": {"field": "x", "type": "quantitative"},
"y": {"field": "y", "type": "quantitative"}
}
}
В чистом Vega аналогичная функциональность реализуется через отдельные marks.
Пример концепции:
{
"marks": [
{
"type": "area"
},
{
"type": "line"
}
]
}
Vega-Lite упрощает этот процесс через свойство line.
Поле line практически не влияет на производительность
при:
Однако при десятках тысяч точек:
null-значенияхПример данных:
[
{"x": 1, "y": 10},
{"x": 2, "y": null},
{"x": 3, "y": 20}
]
Линия будет разорвана в месте отсутствующего значения.
Область также разделится.
tooltipline не влияет на всплывающие подсказки напрямую, однако
визуально делает связь между точкой и областью понятнее.
"tooltip": [
{"field": "x"},
{"field": "y"}
]
line,
если:line,
если:"strokeWidth": 10
Контур начинает доминировать над областью.
"opacity": 1
Линия может визуально сливаться с заливкой.
Например:
"line": {
"color": "#FF0000"
}
при мягкой пастельной области создаёт дисбаланс композиции.
Хорошая практика:
"opacity": 0.4
для области и:
"strokeWidth": 2
для линии.
Поле line одинаково работает:
Внутри line доступны почти все свойства line-mark:
| Свойство | Назначение |
|---|---|
color |
Цвет линии |
strokeWidth |
Толщина |
opacity |
Прозрачность |
strokeDash |
Пунктир |
strokeCap |
Форма концов |
strokeJoin |
Соединение сегментов |
cursor |
Тип курсора |
tooltip |
Подсказка |
clip |
Обрезка |
interpolate |
Интерполяция |
Поле line относится к концепции composite marks —
составных маркеров.
area становится более сложной конструкцией:
point).Это позволяет строить сложные графики декларативно, без ручного описания слоёв.