{
"$schema": "https://vega.github.io/schema/vega/v4.json",
"width": 720,
"padding": 5,
"data": [
{
"name": "source",
"url": "https://tsws.hkvservices.nl/mangrove.ws/entry.asmx/Call?function=mangrove.fews.GetTimeSeries¶meters={host:%27data.hkvfewsscheldestromen.nl%27,port:8080,region:%27FewsPiService%27,version:%271.22%27,headers:%27true%27,start:%272018-07-01T13:07:58.547Z%27,end:%272019-02-15T13:07:58.547Z%27,filterid:%27HKV_WV%27,locations:[%27KGM159%27],parameters:[%27WNSHDB1%27]}",
"format": {"type": "json"}
},
{
"name": "events",
"source": "source",
"transform": [
{"type": "flatten", "fields": ["events"], "as": ["events"]},
{
"type": "project",
"fields": ["events.date", "events.time", "events.value"],
"as": ["date", "time", "value"]
},
{
"type": "formula",
"as": "datetime",
"expr": "datetime(year(datum.date), month(datum.date), date(datum.date), parseInt(substring(datum.time,0,2)), parseInt(substring(datum.time,3,5)),parseInt(substring(datum.time,6,8)))"
}
]
},
{
"name": "datetimeExtent",
"source": "events",
"transform": [
{"type": "extent", "field": "datetime", "signal": "datetimeExtent"}
]
},
{
"name": "highlightedPoint",
"source": "events",
"transform": [
{
"type": "filter",
"expr": "hover && hover.datum.datetime === datum.datetime && hover.datum.value === datum.value"
}
]
},
{
"name": "eventsAggregated",
"source": "events",
"transform": [
{
"type": "formula",
"as": "datetimeAggregated",
"expr": "datetime(year(datum.datetime), month(datum.datetime), date(datum.datetime), 0, 0, 0, 0)"
},
{
"type": "aggregate",
"groupby": ["datetimeAggregated"],
"ops": ["mean"],
"fields": ["value"],
"as": ["valueAggregated"]
}
]
}
],
"signals": [
{"name": "detailDomain", "value": [1548975600000, 1550185200000]},
{"name": "detailHeight", "value": 200},
{"name": "overviewHeight", "update": "detailHeight * 0.25"},
{
"name": "hover",
"value": null,
"on": [
{"events": "@points_voronoi:mouseover", "update": "datum"},
{"events": "@points_voronoi:mouseout", "update": "null"}
]
},
{
"name": "signal_highligtedpoint",
"value": "test",
"update": "data('highlightedPoint')[0]"
}
],
"marks": [
{
"type": "group",
"name": "detail",
"encode": {
"update": {
"height": {"signal": "detailHeight"},
"width": {"signal": "width"}
}
},
"scales": [
{
"name": "xDetail",
"type": "time",
"range": "width",
"domain": {"data": "events", "field": "datetime"},
"domainRaw": {"signal": "detailDomain"}
},
{
"name": "yDetail",
"type": "linear",
"range": [{"signal": "detailHeight"}, 0],
"domain": {"data": "events", "field": "value"},
"nice": true
}
],
"axes": [
{"orient": "bottom", "scale": "xDetail", "grid": true},
{
"orient": "left",
"scale": "yDetail",
"title": "xx",
"grid": true,
"tickCount": {"signal": "ceil(detailHeight/50)"}
}
],
"marks": [
{
"type": "group",
"encode": {
"enter": {
"height": {"field": {"group": "height"}},
"width": {"field": {"group": "width"}},
"clip": {"value": true}
}
},
"marks": [
{
"type": "line",
"from": {"data": "events"},
"encode": {
"update": {
"x": {"scale": "xDetail", "field": "datetime"},
"y": {"scale": "yDetail", "field": "value"},
"stroke": {"value": "steelblue"},
"tooltip": {
"signal": "'value: ' + format(datum.value, '.2f') + ' ('+ timeFormat(datum.datetime, '%Y-%m-%d %H:%M'+')')"
}
}
}
}
]
}
]
},
{
"type": "group",
"name": "overview",
"encode": {
"enter": {
"x": {"value": 0},
"y": {"signal": "detailHeight + 30"},
"height": {"signal": "overviewHeight"},
"width": {"signal": "width"},
"fill": {"value": "transparent"}
}
},
"signals": [
{
"name": "brush",
"update": "[scale('xOverview', detailDomain[0]), scale('xOverview', detailDomain[1])]",
"on": [
{
"events": {"signal": "delta"},
"update": "clampRange([anchor[0] + delta, anchor[1] + delta], 0, width)"
}
]
},
{
"name": "anchor",
"value": null,
"on": [{"events": "@brush:mousedown", "update": "slice(brush)"}]
},
{
"name": "xdown",
"value": 0,
"on": [{"events": "@brush:mousedown", "update": "x()"}]
},
{
"name": "delta",
"value": 0,
"on": [
{
"events": "[@brush:mousedown, window:mouseup] > window:mousemove!",
"update": "x() - xdown"
}
]
},
{
"name": "detailDomain",
"push": "outer",
"on": [
{
"events": {"signal": "brush"},
"update": "span(brush) ? invert('xOverview', brush) : null"
}
]
}
],
"scales": [
{
"name": "xOverview",
"type": "time",
"range": "width",
"domain": {"data": "eventsAggregated", "field": "datetimeAggregated"}
},
{
"name": "yOverview",
"type": "linear",
"range": [{"signal": "overviewHeight"}, 0],
"domain": {"data": "eventsAggregated", "field": "valueAggregated"},
"nice": true,
"zero": true
}
],
"axes": [{"orient": "bottom", "scale": "xOverview"}],
"marks": [
{
"type": "line",
"interactive": false,
"from": {"data": "eventsAggregated"},
"encode": {
"update": {
"x": {"scale": "xOverview", "field": "datetimeAggregated"},
"y": {"scale": "yOverview", "field": "valueAggregated"},
"stroke": {"value": "steelblue"}
}
}
},
{
"type": "rect",
"name": "brush",
"encode": {
"enter": {
"y": {"value": 0},
"height": {"signal": "overviewHeight"},
"fill": {"value": "#333"},
"fillOpacity": {"value": 0.2}
},
"update": {
"x": {"signal": "brush[0]"},
"x2": {"signal": "brush[1]"}
}
}
},
{
"type": "rect",
"interactive": false,
"encode": {
"enter": {
"y": {"value": 0},
"height": {"signal": "overviewHeight"},
"width": {"value": 1},
"fill": {"value": "firebrick"}
},
"update": {"x": {"signal": "brush[0]"}}
}
},
{
"type": "rect",
"interactive": false,
"encode": {
"enter": {
"y": {"value": 0},
"height": {"signal": "overviewHeight"},
"width": {"value": 1},
"fill": {"value": "firebrick"}
},
"update": {"x": {"signal": "brush[1]"}}
}
}
]
}
]
}