From 21c823df1ce7c34f9f7a394f39501c5d8033bc49 Mon Sep 17 00:00:00 2001 From: Kanit Wongsuphasawat Date: Thu, 6 Jul 2023 16:29:44 -0700 Subject: [PATCH] feat: support domainRaw so one may bind domainRaw to a parameter to build custom interaction (#8989) Co-authored-by: GitHub Actions Bot --- build/vega-lite-schema.json | 4 + .../interactive_point_domainRaw_binding.png | Bin 0 -> 27255 bytes .../interactive_point_domainRaw_binding.svg | 1 + ...nteractive_point_domainRaw_binding.vg.json | 148 ++++++++++++++++++ ...nteractive_point_domainRaw_binding.vl.json | 40 +++++ site/docs/encoding/scale.md | 6 +- src/compile/scale/component.ts | 2 +- src/scale.ts | 10 ++ 8 files changed, 209 insertions(+), 2 deletions(-) create mode 100644 examples/compiled/interactive_point_domainRaw_binding.png create mode 100644 examples/compiled/interactive_point_domainRaw_binding.svg create mode 100644 examples/compiled/interactive_point_domainRaw_binding.vg.json create mode 100644 examples/specs/interactive_point_domainRaw_binding.vl.json diff --git a/build/vega-lite-schema.json b/build/vega-lite-schema.json index c12e02e5df..3eb1734b7d 100644 --- a/build/vega-lite-schema.json +++ b/build/vega-lite-schema.json @@ -21739,6 +21739,10 @@ ], "description": "Sets the minimum value in the scale domain, overriding the domain property. This property is only intended for use with scales having continuous domains." }, + "domainRaw": { + "$ref": "#/definitions/ExprRef", + "description": "An expression for an array of raw values that, if non-null, directly overrides the _domain_ property. This is useful for supporting interactions such as panning or zooming a scale. The scale may be initially determined using a data-driven domain, then modified in response to user input by setting the rawDomain value." + }, "exponent": { "anyOf": [ { diff --git a/examples/compiled/interactive_point_domainRaw_binding.png b/examples/compiled/interactive_point_domainRaw_binding.png new file mode 100644 index 0000000000000000000000000000000000000000..eace58471b8cbb4898c20bf272e320e46eec92f4 GIT binary patch literal 27255 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 Ke3h(O(0>8YIuJJi literal 0 HcmV?d00001 diff --git a/examples/compiled/interactive_point_domainRaw_binding.svg b/examples/compiled/interactive_point_domainRaw_binding.svg new file mode 100644 index 0000000000..bfcc3c8d9e --- /dev/null +++ b/examples/compiled/interactive_point_domainRaw_binding.svg @@ -0,0 +1 @@ +50100150200250Horsepower01020304050Miles_per_Gallon2468Cylinders \ No newline at end of file diff --git a/examples/compiled/interactive_point_domainRaw_binding.vg.json b/examples/compiled/interactive_point_domainRaw_binding.vg.json new file mode 100644 index 0000000000..45d5a3127d --- /dev/null +++ b/examples/compiled/interactive_point_domainRaw_binding.vg.json @@ -0,0 +1,148 @@ +{ + "$schema": "https://vega.github.io/schema/vega/v5.json", + "background": "white", + "padding": 5, + "width": 200, + "height": 200, + "style": "cell", + "data": [ + { + "name": "source_0", + "url": "data/cars.json", + "format": {"type": "json"}, + "transform": [ + { + "type": "filter", + "expr": "isValid(datum[\"Horsepower\"]) && isFinite(+datum[\"Horsepower\"]) && isValid(datum[\"Miles_per_Gallon\"]) && isFinite(+datum[\"Miles_per_Gallon\"]) && isValid(datum[\"Cylinders\"]) && isFinite(+datum[\"Cylinders\"])" + } + ] + } + ], + "signals": [ + { + "name": "min_x", + "value": 50, + "bind": {"input": "range", "min": 0, "max": 300} + }, + { + "name": "max_x", + "value": 250, + "bind": {"input": "range", "min": 0, "max": 300} + }, + {"name": "use_custom_x", "value": true, "bind": {"input": "checkbox"}} + ], + "marks": [ + { + "name": "marks", + "type": "symbol", + "clip": true, + "style": ["circle"], + "from": {"data": "source_0"}, + "encode": { + "update": { + "opacity": {"value": 0.7}, + "fill": {"value": "#4c78a8"}, + "ariaRoleDescription": {"value": "circle"}, + "description": { + "signal": "\"Horsepower: \" + (format(datum[\"Horsepower\"], \"\")) + \"; Miles_per_Gallon: \" + (format(datum[\"Miles_per_Gallon\"], \"\")) + \"; Cylinders: \" + (format(datum[\"Cylinders\"], \"\"))" + }, + "x": {"scale": "x", "field": "Horsepower"}, + "y": {"scale": "y", "field": "Miles_per_Gallon"}, + "size": {"scale": "size", "field": "Cylinders"}, + "shape": {"value": "circle"} + } + } + } + ], + "scales": [ + { + "name": "x", + "type": "linear", + "domain": {"data": "source_0", "field": "Horsepower"}, + "range": [0, {"signal": "width"}], + "domainRaw": {"signal": "use_custom_x ? [min_x, max_x] : null"}, + "nice": true, + "zero": true + }, + { + "name": "y", + "type": "linear", + "domain": {"data": "source_0", "field": "Miles_per_Gallon"}, + "range": [{"signal": "height"}, 0], + "nice": true, + "zero": true + }, + { + "name": "size", + "type": "linear", + "domain": {"data": "source_0", "field": "Cylinders"}, + "range": [0, 361], + "zero": true + } + ], + "axes": [ + { + "scale": "x", + "orient": "bottom", + "gridScale": "y", + "grid": true, + "tickCount": {"signal": "ceil(width/40)"}, + "domain": false, + "labels": false, + "aria": false, + "maxExtent": 0, + "minExtent": 0, + "ticks": false, + "zindex": 0 + }, + { + "scale": "y", + "orient": "left", + "gridScale": "x", + "grid": true, + "tickCount": {"signal": "ceil(height/40)"}, + "domain": false, + "labels": false, + "aria": false, + "maxExtent": 0, + "minExtent": 0, + "ticks": false, + "zindex": 0 + }, + { + "scale": "x", + "orient": "bottom", + "grid": false, + "title": "Horsepower", + "labelFlush": true, + "labelOverlap": true, + "tickCount": {"signal": "ceil(width/40)"}, + "zindex": 0 + }, + { + "scale": "y", + "orient": "left", + "grid": false, + "title": "Miles_per_Gallon", + "labelOverlap": true, + "tickCount": {"signal": "ceil(height/40)"}, + "zindex": 0 + } + ], + "legends": [ + { + "size": "size", + "symbolType": "circle", + "title": "Cylinders", + "encode": { + "symbols": { + "update": { + "fill": {"value": "#4c78a8"}, + "opacity": {"value": 0.7}, + "stroke": {"value": "transparent"} + } + } + } + } + ] +} diff --git a/examples/specs/interactive_point_domainRaw_binding.vl.json b/examples/specs/interactive_point_domainRaw_binding.vl.json new file mode 100644 index 0000000000..1861553be8 --- /dev/null +++ b/examples/specs/interactive_point_domainRaw_binding.vl.json @@ -0,0 +1,40 @@ +{ + "$schema": "https://vega.github.io/schema/vega-lite/v5.json", + "data": {"url": "data/cars.json"}, + "params": [{ + "name": "min_x", + "value": 50, + "bind": { + "input": "range", + "min": 0, + "max": 300 + } + }, { + "name": "max_x", + "value": 250, + "bind": { + "input": "range", + "min": 0, + "max": 300 + } + },{ + "name": "use_custom_x", + "value": true, + "bind": { + "input": "checkbox" + } + }], + "mark": {"type": "circle", "clip": true}, + "encoding": { + "x": { + "field": "Horsepower", "type": "quantitative", + "scale": { + "domainRaw": {"expr": "use_custom_x ? [min_x, max_x] : null"} + } + }, + "y": { + "field": "Miles_per_Gallon", "type": "quantitative" + }, + "size": {"field": "Cylinders", "type": "quantitative"} + } +} diff --git a/site/docs/encoding/scale.md b/site/docs/encoding/scale.md index 4d06cd44d2..86673fb955 100644 --- a/site/docs/encoding/scale.md +++ b/site/docs/encoding/scale.md @@ -75,7 +75,7 @@ bar, image, rect, and rule marks while `"point"` is the default scales for all o By default, a scale in Vega-Lite draws domain values directly from a channel's encoded field. Users can specify the `domain` property of a scale to customize its domain values. To sort the order of the domain of the encoded, the [`sort`](sort.html) property of a [field definition](encoding.html#field-def) can be specified. -{% include table.html props="domain,domainMax,domainMin,domainMid" source="Scale" %} +{% include table.html props="domain,domainMax,domainMin,domainMid,domainRaw" source="Scale" %} A common use case for the `domain` property is to limit, for example, the `x` range of values to include in a plot. However, setting the domain property alone is insufficient to achieve the desired effect. @@ -101,6 +101,10 @@ There are two approaches to keep the mark from being plotted outside the desired
+### Example: Using `domainRaw` to bind domain interactively + +
+