Единицы времени
Сводные показатели по авиарейсам США с интерактивной группировкой по единицам времени. Пример показывает, как преобразование timeunit вместе с функциями выражений timeSequence и timeUnitSpecifier позволяют гибко обрабатывать и форматировать даты и время.
Спецификация Vega в JSON <>
{
"$schema": "https://vega.github.io/schema/vega/v6.json",
"description": "Столбчатая диаграмма статистики авиарейсов с группировкой по выбранной единице времени.",
"width": 600,
"height": 300,
"padding": 5,
"autosize": {"type": "fit", "resize": true, "contains": "padding"},
"title": {
"text": "Статистика авиарейсов США",
"subtitle": "Выборка из 20 тысяч рейсов, январь — март 2001 года",
"subtitleFontStyle": "italic",
"frame": "group",
"anchor": "start",
"offset": 10
},
"signals": [
{
"name": "timeunit", "value": ["day"],
"bind": {"name": "Единица времени", "input": "select", "options": [
["year"], ["month"], ["date"], ["day"], ["hours"]
], "labels": ["Год", "Месяц", "Дата", "День недели", "Час"]}
},
{
"name": "measure", "value": "delay",
"bind": {"name": "Показатель", "input": "select", "options": ["count", "delay"], "labels": ["Количество", "Задержка"]}
},
{
"name": "title",
"update": "measure == 'delay' ? 'Средняя задержка (мин)' : 'Число рейсов'"
}
],
"data": [
{
"name": "flights",
"url": "data/flights-20k.json",
"format": {"type": "json", "parse": "auto"},
"transform": [
{
"type": "timeunit",
"field": "date",
"units": {"signal": "timeunit"},
"signal": "tbin"
},
{
"type": "aggregate",
"groupby": ["unit0"],
"ops": ["count", "average"],
"fields": [null, "delay"],
"as": ["count", "delay"]
}
]
}
],
"scales": [
{
"name": "xscale",
"type": "band",
"range": "width",
"padding": 0.05,
"round": true,
"domain": {"signal": "timeSequence(tbin.unit, tbin.start, tbin.stop)"}
},
{
"name": "yscale",
"type": "linear",
"range": "height",
"domain": {"data": "flights", "field": {"signal": "measure"}},
"zero": true,
"nice": true
}
],
"axes": [
{ "orient": "bottom", "scale": "xscale",
"formatType": "time", "format": {"signal": "timeUnitSpecifier(tbin.units, {hours: '%H'})"} },
{ "orient": "left", "scale": "yscale", "tickCount": 7,
"title": {"signal": "title"} }
],
"marks": [
{
"type": "rect",
"from": {"data": "flights"},
"encode": {
"update": {
"x": {"scale": "xscale", "field": "unit0"},
"width": {"scale": "xscale", "band": 1},
"y": {"scale": "yscale", "field": {"signal": "measure"}},
"y2": {"scale": "yscale", "value": 0},
"fill": {"value": "steelblue"},
"tooltip": {"signal": "{timeunit: timeFormat(datum.unit0, timeUnitSpecifier(tbin.units)), count: format(datum.count, ',') + ' рейсов', delay: format(datum.delay, '.1f') + ' мин (среднее)'}"}
},
"hover": {
"fill": {"value": "firebrick"}
}
}
}
]
}