diff --git a/examples/compiled/bar_config_no_zero.png b/examples/compiled/bar_config_no_zero.png
new file mode 100644
index 00000000000..01a1312af20
Binary files /dev/null and b/examples/compiled/bar_config_no_zero.png differ
diff --git a/examples/compiled/bar_config_no_zero.svg b/examples/compiled/bar_config_no_zero.svg
new file mode 100644
index 00000000000..9e458ba5253
--- /dev/null
+++ b/examples/compiled/bar_config_no_zero.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/examples/compiled/bar_config_no_zero.vg.json b/examples/compiled/bar_config_no_zero.vg.json
new file mode 100644
index 00000000000..a7403201ada
--- /dev/null
+++ b/examples/compiled/bar_config_no_zero.vg.json
@@ -0,0 +1,122 @@
+{
+ "$schema": "https://vega.github.io/schema/vega/v5.json",
+ "description": "A simple bar chart with embedded data.",
+ "background": "white",
+ "padding": 5,
+ "height": 200,
+ "style": "cell",
+ "data": [
+ {
+ "name": "source_0",
+ "values": [
+ {"a": "A", "b": 28},
+ {"a": "B", "b": 55},
+ {"a": "C", "b": 43},
+ {"a": "D", "b": 91},
+ {"a": "E", "b": 81},
+ {"a": "F", "b": 53},
+ {"a": "G", "b": 19},
+ {"a": "H", "b": 87},
+ {"a": "I", "b": 52}
+ ]
+ },
+ {
+ "name": "data_0",
+ "source": "source_0",
+ "transform": [
+ {
+ "type": "stack",
+ "groupby": ["a"],
+ "field": "b",
+ "sort": {"field": [], "order": []},
+ "as": ["b_start", "b_end"],
+ "offset": "zero"
+ },
+ {
+ "type": "filter",
+ "expr": "isValid(datum[\"b\"]) && isFinite(+datum[\"b\"])"
+ }
+ ]
+ }
+ ],
+ "signals": [
+ {"name": "x_step", "value": 20},
+ {
+ "name": "width",
+ "update": "bandspace(domain('x').length, 0.1, 0.05) * x_step"
+ }
+ ],
+ "marks": [
+ {
+ "name": "marks",
+ "type": "rect",
+ "style": ["bar"],
+ "from": {"data": "data_0"},
+ "encode": {
+ "update": {
+ "fill": {"value": "#4c78a8"},
+ "ariaRoleDescription": {"value": "bar"},
+ "description": {
+ "signal": "\"a: \" + (isValid(datum[\"a\"]) ? datum[\"a\"] : \"\"+datum[\"a\"]) + \"; b: \" + (format(datum[\"b\"], \"\"))"
+ },
+ "x": {"scale": "x", "field": "a"},
+ "width": {"signal": "max(0.25, bandwidth('x'))"},
+ "y": {"scale": "y", "field": "b_end"},
+ "y2": {"scale": "y", "field": "b_start"}
+ }
+ }
+ }
+ ],
+ "scales": [
+ {
+ "name": "x",
+ "type": "band",
+ "domain": {"data": "data_0", "field": "a", "sort": true},
+ "range": {"step": {"signal": "x_step"}},
+ "paddingInner": 0.1,
+ "paddingOuter": 0.05
+ },
+ {
+ "name": "y",
+ "type": "linear",
+ "domain": {"data": "data_0", "fields": ["b_start", "b_end"]},
+ "range": [{"signal": "height"}, 0],
+ "nice": true,
+ "zero": true
+ }
+ ],
+ "axes": [
+ {
+ "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": "a",
+ "labelAngle": 0,
+ "labelBaseline": "top",
+ "zindex": 0
+ },
+ {
+ "scale": "y",
+ "orient": "left",
+ "grid": false,
+ "title": "b",
+ "labelOverlap": true,
+ "tickCount": {"signal": "ceil(height/40)"},
+ "zindex": 0
+ }
+ ]
+}
diff --git a/examples/compiled/bar_gantt_config_no_zero.png b/examples/compiled/bar_gantt_config_no_zero.png
new file mode 100644
index 00000000000..4588a939592
Binary files /dev/null and b/examples/compiled/bar_gantt_config_no_zero.png differ
diff --git a/examples/compiled/bar_gantt_config_no_zero.svg b/examples/compiled/bar_gantt_config_no_zero.svg
new file mode 100644
index 00000000000..e39e6a2bfe8
--- /dev/null
+++ b/examples/compiled/bar_gantt_config_no_zero.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/examples/compiled/bar_gantt_config_no_zero.vg.json b/examples/compiled/bar_gantt_config_no_zero.vg.json
new file mode 100644
index 00000000000..4fd65adfac1
--- /dev/null
+++ b/examples/compiled/bar_gantt_config_no_zero.vg.json
@@ -0,0 +1,107 @@
+{
+ "$schema": "https://vega.github.io/schema/vega/v5.json",
+ "description": "A simple bar chart with ranged data (aka Gantt Chart).",
+ "background": "white",
+ "padding": 5,
+ "width": 200,
+ "style": "cell",
+ "data": [
+ {
+ "name": "source_0",
+ "values": [
+ {"task": "A", "start": 1, "end": 3},
+ {"task": "B", "start": 3, "end": 8},
+ {"task": "C", "start": 8, "end": 10}
+ ]
+ },
+ {
+ "name": "data_0",
+ "source": "source_0",
+ "transform": [
+ {
+ "type": "filter",
+ "expr": "isValid(datum[\"start\"]) && isFinite(+datum[\"start\"])"
+ }
+ ]
+ }
+ ],
+ "signals": [
+ {"name": "y_step", "value": 20},
+ {
+ "name": "height",
+ "update": "bandspace(domain('y').length, 0.1, 0.05) * y_step"
+ }
+ ],
+ "marks": [
+ {
+ "name": "marks",
+ "type": "rect",
+ "style": ["bar"],
+ "from": {"data": "data_0"},
+ "encode": {
+ "update": {
+ "fill": {"value": "#4c78a8"},
+ "ariaRoleDescription": {"value": "bar"},
+ "description": {
+ "signal": "\"start: \" + (format(datum[\"start\"], \"\")) + \"; task: \" + (isValid(datum[\"task\"]) ? datum[\"task\"] : \"\"+datum[\"task\"]) + \"; end: \" + (format(datum[\"end\"], \"\"))"
+ },
+ "x": {"scale": "x", "field": "start"},
+ "x2": {"scale": "x", "field": "end"},
+ "y": {"scale": "y", "field": "task"},
+ "height": {"signal": "max(0.25, bandwidth('y'))"}
+ }
+ }
+ }
+ ],
+ "scales": [
+ {
+ "name": "x",
+ "type": "linear",
+ "domain": {"data": "data_0", "fields": ["start", "end"]},
+ "range": [0, {"signal": "width"}],
+ "nice": true,
+ "zero": true
+ },
+ {
+ "name": "y",
+ "type": "band",
+ "domain": {"data": "data_0", "field": "task", "sort": true},
+ "range": {"step": {"signal": "y_step"}},
+ "paddingInner": 0.1,
+ "paddingOuter": 0.05
+ }
+ ],
+ "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": "x",
+ "orient": "bottom",
+ "grid": false,
+ "title": "start, end",
+ "labelFlush": true,
+ "labelOverlap": true,
+ "tickCount": {"signal": "ceil(width/40)"},
+ "zindex": 0
+ },
+ {
+ "scale": "y",
+ "orient": "left",
+ "grid": false,
+ "title": "task",
+ "zindex": 0
+ }
+ ]
+}
diff --git a/examples/compiled/point_2d_no_zero.png b/examples/compiled/point_2d_no_zero.png
new file mode 100644
index 00000000000..7d1e7dff5de
Binary files /dev/null and b/examples/compiled/point_2d_no_zero.png differ
diff --git a/examples/compiled/point_2d_no_zero.svg b/examples/compiled/point_2d_no_zero.svg
new file mode 100644
index 00000000000..8f599832fdb
--- /dev/null
+++ b/examples/compiled/point_2d_no_zero.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/examples/compiled/point_2d_no_zero.vg.json b/examples/compiled/point_2d_no_zero.vg.json
new file mode 100644
index 00000000000..86c0194c926
--- /dev/null
+++ b/examples/compiled/point_2d_no_zero.vg.json
@@ -0,0 +1,110 @@
+{
+ "$schema": "https://vega.github.io/schema/vega/v5.json",
+ "description": "A scatterplot showing horsepower and miles per gallons for various cars.",
+ "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\"])"
+ }
+ ]
+ }
+ ],
+ "marks": [
+ {
+ "name": "marks",
+ "type": "symbol",
+ "style": ["point"],
+ "from": {"data": "source_0"},
+ "encode": {
+ "update": {
+ "opacity": {"value": 0.7},
+ "fill": {"value": "transparent"},
+ "stroke": {"value": "#4c78a8"},
+ "ariaRoleDescription": {"value": "point"},
+ "description": {
+ "signal": "\"Horsepower: \" + (format(datum[\"Horsepower\"], \"\")) + \"; Miles_per_Gallon: \" + (format(datum[\"Miles_per_Gallon\"], \"\"))"
+ },
+ "x": {"scale": "x", "field": "Horsepower"},
+ "y": {"scale": "y", "field": "Miles_per_Gallon"}
+ }
+ }
+ }
+ ],
+ "scales": [
+ {
+ "name": "x",
+ "type": "linear",
+ "domain": {"data": "source_0", "field": "Horsepower"},
+ "range": [0, {"signal": "width"}],
+ "nice": true,
+ "zero": true
+ },
+ {
+ "name": "y",
+ "type": "linear",
+ "domain": {"data": "source_0", "field": "Miles_per_Gallon"},
+ "range": [{"signal": "height"}, 0],
+ "nice": true,
+ "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
+ }
+ ]
+}