Created
October 22, 2023 11:08
-
-
Save declann/243beeaf04ac83c4b7073b4fa95f893a to your computer and use it in GitHub Desktop.
Vega spec from Sun Oct 22 2023
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"$schema": "https://vega.github.io/schema/vega/v5.json", | |
"width": 700, | |
"height": 400, | |
"padding": 5, | |
"data": [ | |
{ | |
"name": "table", | |
"values": [ | |
{"category": 1960, "amount": 4}, | |
{"category": 1990, "amount": 8}, | |
{"category": 2020, "amount": 28}, | |
{"category": 2025, "amount": 29}, | |
{"category": 2030, "amount": 30}, | |
{"category": 2035, "amount": 32}, | |
{"category": 2040, "amount": 33}, | |
{"category": 2045, "amount": 34}, | |
{"category": 2050, "amount": 38}, | |
{"category": 2100, "amount": 90}, | |
{"category": 2150, "amount": 5} | |
] | |
}, | |
{ | |
"name": "seq", | |
"transform": [ | |
{"type": "sequence", "start": 1960, "stop": 2200, "step": 5}, | |
{"type": "filter", "expr": "datum.data >= bau.category"} | |
] | |
}, | |
{ | |
"name": "seq2", | |
"transform": [ | |
{"type": "sequence", "start": 1960, "stop": 2200, "step": 5}, | |
{ | |
"type": "lookup", | |
"from": "table", | |
"key": "category", | |
"fields": ["data"], | |
"as": ["table"] | |
}, | |
{"type": "filter", "expr": "datum.table != null"}, | |
{"type": "window", "ops": ["lag"], "fields": ["table"]}, | |
{"type": "filter", "expr": "datum.lag_table != null"}, | |
{ | |
"type": "formula", | |
"expr": "datum.lag_table.amount+(datum.table.amount-datum.lag_table.amount)*(datum.table.category-datum.lag_table.category)", | |
"as": "interpolated" | |
} | |
] | |
}, | |
{ | |
"name": "interpolated", | |
"transform": [ | |
{"type": "sequence", "start": 1960, "stop": 2200, "step": 1}, | |
{ | |
"type": "lookup", | |
"from": "table", | |
"key": "category", | |
"fields": ["data"], | |
"values": ["category"], | |
"as": ["group"] | |
}, | |
{"type": "window", "ops": ["next_value"], "fields": ["group"]}, | |
{ | |
"type": "lookup", | |
"from": "seq2", | |
"key": "data", | |
"fields": ["next_value_group"], | |
"as": ["group"] | |
}, | |
{"type": "filter", "expr": "datum.group != null"}, | |
{ | |
"type": "formula", | |
"expr": "max(0,datum.data < bau.category ? datum.group.lag_table.amount+(datum.group.table.amount-datum.group.lag_table.amount)*(datum.data-datum.group.lag_table.category)/(datum.group.table.category-datum.group.lag_table.category) : bau.amount+(0-bau.amount)*(datum.data-bau.category)/(zero_category-bau.category))", | |
"as": "interpolated" | |
} | |
] | |
}, | |
{ | |
"name": "interpolated_baseline", | |
"transform": [ | |
{"type": "sequence", "start": 1960, "stop": 2200, "step": 1}, | |
{ | |
"type": "lookup", | |
"from": "table", | |
"key": "category", | |
"fields": ["data"], | |
"values": ["category"], | |
"as": ["group"] | |
}, | |
{"type": "window", "ops": ["next_value"], "fields": ["group"]}, | |
{ | |
"type": "lookup", | |
"from": "seq2", | |
"key": "data", | |
"fields": ["next_value_group"], | |
"as": ["group"] | |
}, | |
{"type": "filter", "expr": "datum.group != null"}, | |
{ | |
"type": "formula", | |
"expr": "datum.group.lag_table.amount+(datum.group.table.amount-datum.group.lag_table.amount)*(datum.data-datum.group.lag_table.category)/(datum.group.table.category-datum.group.lag_table.category)", | |
"as": "interpolated" | |
} | |
] | |
}, | |
{ | |
"name": "seq3", | |
"transform": [ | |
{"type": "sequence", "start": 1960, "stop": 2200, "step": 5}, | |
{ | |
"type": "lookup", | |
"from": "seq2", | |
"key": "data", | |
"fields": ["data"], | |
"as": ["table"] | |
}, | |
{ | |
"type": "window", | |
"ops": ["first_value"], | |
"sort": {"field": "table"}, | |
"fields": ["table"] | |
}, | |
{ | |
"type": "formula", | |
"as": "aaa", | |
"expr": "isValid(datum.table) ? 0 : datum.lag_table" | |
} | |
] | |
}, | |
{ | |
"name": "table-first", | |
"source": "table", | |
"transform": [{"type": "filter", "expr": "datum.category == 1960"}] | |
}, | |
{ | |
"name": "table-baus", | |
"source": "table", | |
"transform": [ | |
{"type": "filter", "expr": "datum.category <= bau.category"} | |
] | |
} | |
], | |
"signals": [ | |
{ | |
"name": "bau", | |
"value": {"category": 2020, "amount": 28}, | |
"on": [{"events": "@baus:mouseover", "update": "datum"}] | |
}, | |
{ | |
"name": "zero_category", | |
"update": "max(zero_category,bau.category)", | |
"value": 2050, | |
"on": [ | |
{"events": "@zeros:mouseover", "update": "max(datum.data,bau.category)"} | |
] | |
} | |
], | |
"scales": [ | |
{ | |
"name": "xscale", | |
"type": "linear", | |
"zero": false, | |
"domain": {"data": "table", "field": "category"}, | |
"range": "width", | |
"padding": 0.05, | |
"round": true | |
}, | |
{ | |
"name": "yscale", | |
"domain": {"data": "table", "field": "amount"}, | |
"nice": true, | |
"range": "height" | |
} | |
], | |
"axes": [ | |
{ | |
"orient": "bottom", | |
"scale": "xscale", | |
"format": ".0f", | |
"labelFontSize": 20, | |
"tickCount": 6 | |
}, | |
{"orient": "left", "scale": "yscale"} | |
], | |
"marks": [ | |
{ | |
"type": "rect", | |
"from": {"data": "interpolated_baseline"}, | |
"encode": { | |
"enter": {"fill": {"value": "pink"}, "opacity": {"value": 0.1}}, | |
"update": { | |
"x": {"scale": "xscale", "field": "data"}, | |
"width": {"value": 10}, | |
"y": {"scale": "yscale", "field": "interpolated"}, | |
"y2": {"scale": "yscale", "value": 0} | |
} | |
} | |
}, | |
{ | |
"type": "rect", | |
"from": {"data": "interpolated"}, | |
"encode": { | |
"enter": {"fill": {"value": "steelblue"}, "opacity": {"value": 0.5}}, | |
"update": { | |
"x": {"scale": "xscale", "field": "data"}, | |
"width": {"value": 9}, | |
"y": {"scale": "yscale", "field": "interpolated"}, | |
"y2": {"scale": "yscale", "value": 0} | |
} | |
} | |
}, | |
{ | |
"type": "rect", | |
"from": {"data": "table"}, | |
"encode": { | |
"enter": { | |
"x": {"scale": "xscale", "field": "category"}, | |
"width": {"scale": "xscale", "band": 1}, | |
"y": {"scale": "yscale", "field": "amount"}, | |
"y2": {"scale": "yscale", "value": 0}, | |
"opacity": {"value": 0.1} | |
}, | |
"update": {"fill": {"value": "steelblue"}} | |
} | |
}, | |
{ | |
"type": "line", | |
"from": {"data": "table-baus"}, | |
"encode": { | |
"enter": { | |
"strokeWidth": {"value": 10}, | |
"stroke": {"value": "black"}, | |
"interpolate": {"value": "linear"}, | |
"strokeCap": {"value": "round"} | |
}, | |
"update": { | |
"x": {"scale": "xscale", "field": "category", "band": 1}, | |
"y": {"scale": "yscale", "field": "amount"} | |
} | |
} | |
}, | |
{ | |
"type": "rule", | |
"encode": { | |
"enter": { | |
"strokeWidth": {"value": 10}, | |
"strokeCap": {"value": "round"} | |
}, | |
"update": { | |
"x": {"scale": "xscale", "signal": "bau.category", "band": 1}, | |
"y": {"scale": "yscale", "signal": "bau.amount", "offset": 0}, | |
"x2": {"scale": "xscale", "signal": "zero_category", "band": 1}, | |
"y2": {"scale": "yscale", "value": 0, "offset": 0} | |
} | |
} | |
}, | |
{ | |
"type": "rule", | |
"encode": { | |
"enter": { | |
"strokeWidth": {"value": 10}, | |
"strokeCap": {"value": "round"} | |
}, | |
"update": { | |
"x2": {"scale": "xscale", "value": 2200, "band": 1}, | |
"x": {"scale": "xscale", "signal": "zero_category", "band": 1}, | |
"y": {"scale": "yscale", "value": 0, "offset": 0} | |
} | |
} | |
}, | |
{ | |
"type": "rule", | |
"from": {"data": "table-first"}, | |
"encode": { | |
"enter": { | |
"strokeWidth": {"value": 10}, | |
"strokeCap": {"value": "round"} | |
}, | |
"update": { | |
"x2": {"scale": "xscale", "field": "category", "band": 1}, | |
"x": {"scale": "xscale", "field": "category", "band": 0}, | |
"y": {"scale": "yscale", "field": "amount", "offset": 0} | |
} | |
} | |
}, | |
{ | |
"type": "symbol", | |
"name": "zeros", | |
"from": {"data": "seq"}, | |
"encode": { | |
"enter": { | |
"size": {"value": 500}, | |
"fill": {"value": "lightblue"}, | |
"stroke": {"value": "black"}, | |
"shape": {"value": "triangle"}, | |
"opacity": {"value": 0.8} | |
}, | |
"update": { | |
"x": {"scale": "xscale", "field": "data", "band": 1}, | |
"y": {"scale": "yscale", "value": "0", "offset": 0} | |
} | |
} | |
}, | |
{ | |
"type": "symbol", | |
"name": "baus", | |
"from": {"data": "table"}, | |
"encode": { | |
"enter": { | |
"size": {"value": 500}, | |
"fill": {"value": "pink"}, | |
"stroke": {"value": "black"}, | |
"shape": {"value": "square"}, | |
"opacity": {"value": 0.8} | |
}, | |
"update": { | |
"x": {"scale": "xscale", "field": "category", "band": 1}, | |
"y": {"scale": "yscale", "field": "amount", "offset": 0} | |
} | |
} | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment