Временные шкалы в Vega и Vega-Lite предназначены для корректного отображения непрерывных дат и времени на числовой оси. В отличие от линейных или логарифмических шкал, временные учитывают календарную структуру данных: месяцы разной длины, високосные годы, переходы часовых поясов и форматирование локальных дат.
В основе работы временной шкалы лежит преобразование входного
значения в тип Date. В Vega-Lite временные поля обычно
имеют тип:
{
"field": "date",
"type": "temporal"
}
Значения могут задаваться в нескольких форматах:
"2024-01-15T10:30:00Z"После парсинга данные становятся объектами времени, которые
интерпретируются шкалой time или utc.
time и
utctime)Шкала time использует локальное время окружения
выполнения (браузера или Node.js). Это означает, что отображение зависит
от часового пояса системы.
{
"encoding": {
"x": {
"field": "date",
"type": "temporal",
"timeUnit": "yearmonthdate"
}
},
"mark": "line"
}
Особенности:
utc)Шкала utc фиксирует время в универсальном
координированном времени, исключая влияние локальной зоны.
{
"encoding": {
"x": {
"field": "date",
"type": "temporal",
"scale": {
"type": "utc"
}
}
}
}
или через тип шкалы:
{
"encoding": {
"x": {
"field": "date",
"type": "temporal",
"scale": { "type": "utc" }
}
}
}
Особенности:
Vega преобразует временные значения в числовую ось времени:
Шкала time использует локальные преобразования, тогда
как utc работает исключительно с UTC-миллисекундами без
локальной коррекции.
В Vega (не Vega-Lite) шкала задаётся явно:
{
"scales": [
{
"name": "xscale",
"type": "time",
"domain": {"data": "table", "field": "date"},
"range": "width"
}
]
}
или:
{
"type": "utc",
"domain": {"data": "table", "field": "date"},
"range": "width"
}
Различие:
time — локальная интерпретацияutc — глобальная временная осьVega-Lite часто самостоятельно выбирает шкалу:
scale.type используется
timeutcПример автоматического поведения:
{
"mark": "line",
"encoding": {
"x": {
"field": "date",
"type": "temporal"
},
"y": {
"field": "value",
"type": "quantitative"
}
}
}
timeUnit выполняет агрегацию временных значений:
"timeUnit": "yearmonth"
или более детально:
"timeUnit": "yearmonthdatehours"
Эффекты:
Важно: timeUnit применяется до масштабирования, влияя на
распределение точек на оси time/utc.
Ось времени поддерживает форматирование через
axis.format:
{
"axis": {
"format": "%Y-%m"
}
}
Типовые токены:
%Y — год%m — месяц%d — день%H — часы%M — минутыФорматирование не влияет на саму шкалу, только на визуализацию.
timeПри переходе пользователя между часовыми поясами:
utcСтроки вида:
2024-01-01 12:00:00
могут интерпретироваться по-разному в зависимости от окружения.
Проблема возникает при комбинировании:
Результат — разрыв временной оси.
utc при глобальных данныхВ распределённых системах приводит к:
Шкала времени включает:
При больших наборах данных оптимизация достигается через:
timeUnitВременные шкалы часто используются с:
line)area)point)Поведение интерполяции зависит от плотности временной оси:
time может давать неравномерные расстоянияutc обеспечивает строгую регулярностьtime и utctimeutcutctimeРазличие определяется не визуальным эффектом, а моделью согласованности данных во времени.