From 7a5a7647c9eeba4486b7ad4073477e9348292fe2 Mon Sep 17 00:00:00 2001 From: Younghoon Kim Date: Thu, 11 Aug 2022 16:43:41 -0700 Subject: [PATCH 1/7] Add examples --- build/vega-lite-schema.json | 4 ++++ examples/specs/bar_config_no_zero.vl.json | 17 +++++++++++++++++ .../specs/bar_gantt_config_no_zero.vl.json | 18 ++++++++++++++++++ examples/specs/point_2d_config_no_zero.vl.json | 11 +++++++++++ src/scale.ts | 9 +++++++++ 5 files changed, 59 insertions(+) create mode 100644 examples/specs/bar_config_no_zero.vl.json create mode 100644 examples/specs/bar_gantt_config_no_zero.vl.json create mode 100644 examples/specs/point_2d_config_no_zero.vl.json diff --git a/build/vega-lite-schema.json b/build/vega-lite-schema.json index 56bd01bbbc..d8693f4c5d 100644 --- a/build/vega-lite-schema.json +++ b/build/vega-lite-schema.json @@ -21608,6 +21608,10 @@ } ], "description": "Reverse x-scale by default (useful for right-to-left charts)." + }, + "zero": { + "description": "Default for ensuring that a zero baseline values for [`quantize`](https://vega.github.io/vega-lite/docs/scale.html#quantize) scale.\n\n\n__Default value:__ `true`", + "type": "boolean" } }, "type": "object" diff --git a/examples/specs/bar_config_no_zero.vl.json b/examples/specs/bar_config_no_zero.vl.json new file mode 100644 index 0000000000..4a155b00d7 --- /dev/null +++ b/examples/specs/bar_config_no_zero.vl.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://vega.github.io/schema/vega-lite/v5.json", + "description": "A simple bar chart with embedded data.", + "data": { + "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} + ] + }, + "mark": "bar", + "encoding": { + "x": {"field": "a", "type": "nominal", "axis": {"labelAngle": 0}}, + "y": {"field": "b", "type": "quantitative"} + }, + "config": { "scale": { "zero": false } } +} diff --git a/examples/specs/bar_gantt_config_no_zero.vl.json b/examples/specs/bar_gantt_config_no_zero.vl.json new file mode 100644 index 0000000000..66a0b32e13 --- /dev/null +++ b/examples/specs/bar_gantt_config_no_zero.vl.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://vega.github.io/schema/vega-lite/v5.json", + "description": "A simple bar chart with ranged data (aka Gantt Chart).", + "data": { + "values": [ + {"task": "A", "start": 1, "end": 3}, + {"task": "B", "start": 3, "end": 8}, + {"task": "C", "start": 8, "end": 10} + ] + }, + "mark": "bar", + "encoding": { + "y": {"field": "task", "type": "ordinal"}, + "x": {"field": "start", "type": "quantitative"}, + "x2": {"field": "end"} + }, + "config": { "scale": { "zero": false } } +} diff --git a/examples/specs/point_2d_config_no_zero.vl.json b/examples/specs/point_2d_config_no_zero.vl.json new file mode 100644 index 0000000000..977c8553c7 --- /dev/null +++ b/examples/specs/point_2d_config_no_zero.vl.json @@ -0,0 +1,11 @@ +{ + "$schema": "https://vega.github.io/schema/vega-lite/v5.json", + "description": "A scatterplot showing horsepower and miles per gallons for various cars.", + "data": { "url": "data/cars.json" }, + "mark": "point", + "encoding": { + "x": { "field": "Horsepower", "type": "quantitative" }, + "y": { "field": "Miles_per_Gallon", "type": "quantitative" } + }, + "config": { "scale": { "zero": false } } +} diff --git a/src/scale.ts b/src/scale.ts index a9bfd382f1..fe4f8f3ee4 100644 --- a/src/scale.ts +++ b/src/scale.ts @@ -415,6 +415,15 @@ export interface ScaleConfig { * Reverse x-scale by default (useful for right-to-left charts). */ xReverse?: boolean | ES; + + /** + * Default for ensuring that a zero baseline values for [`quantize`](https://vega.github.io/vega-lite/docs/scale.html#quantize) scale. + * + * + * __Default value:__ `true` + * + */ + zero?: boolean; } export const defaultScaleConfig: ScaleConfig = { From deec9951c4f79446d7dbc9895c83575729443eeb Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot Date: Fri, 12 Aug 2022 00:28:49 +0000 Subject: [PATCH 2/7] chore: update examples [CI] --- examples/compiled/bar_config_no_zero.png | Bin 0 -> 4954 bytes examples/compiled/bar_config_no_zero.svg | 1 + examples/compiled/bar_config_no_zero.vg.json | 122 ++++++++++++++++++ .../compiled/bar_gantt_config_no_zero.png | Bin 0 -> 3940 bytes .../compiled/bar_gantt_config_no_zero.svg | 1 + .../compiled/bar_gantt_config_no_zero.vg.json | 107 +++++++++++++++ examples/compiled/point_2d_config_no_zero.png | Bin 0 -> 26321 bytes examples/compiled/point_2d_config_no_zero.svg | 1 + .../compiled/point_2d_config_no_zero.vg.json | 110 ++++++++++++++++ 9 files changed, 342 insertions(+) create mode 100644 examples/compiled/bar_config_no_zero.png create mode 100644 examples/compiled/bar_config_no_zero.svg create mode 100644 examples/compiled/bar_config_no_zero.vg.json create mode 100644 examples/compiled/bar_gantt_config_no_zero.png create mode 100644 examples/compiled/bar_gantt_config_no_zero.svg create mode 100644 examples/compiled/bar_gantt_config_no_zero.vg.json create mode 100644 examples/compiled/point_2d_config_no_zero.png create mode 100644 examples/compiled/point_2d_config_no_zero.svg create mode 100644 examples/compiled/point_2d_config_no_zero.vg.json diff --git a/examples/compiled/bar_config_no_zero.png b/examples/compiled/bar_config_no_zero.png new file mode 100644 index 0000000000000000000000000000000000000000..01a1312af20c77cbb9d733c46118feb17e20ea22 GIT binary patch literal 4954 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 Mwz3AiMA0nZFYc2|b^rhX literal 0 HcmV?d00001 diff --git a/examples/compiled/bar_config_no_zero.svg b/examples/compiled/bar_config_no_zero.svg new file mode 100644 index 0000000000..9e458ba525 --- /dev/null +++ b/examples/compiled/bar_config_no_zero.svg @@ -0,0 +1 @@ +ABCDEFGHIa020406080100b \ 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 0000000000..a7403201ad --- /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 0000000000000000000000000000000000000000..4588a939592b08e5449c4ab37bf2e0a70cdcf127 GIT binary patch literal 3940 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 W==hyS+WX+x3|%n1h \ 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 0000000000..4fd65adfac --- /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_config_no_zero.png b/examples/compiled/point_2d_config_no_zero.png new file mode 100644 index 0000000000000000000000000000000000000000..7d1e7dff5de772fdc4ce6cf85b58fcb4dc6ea6a8 GIT binary patch literal 26321 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 qbs@g9p!mVlNK}Y@4ESFy$Pg|7 literal 0 HcmV?d00001 diff --git a/examples/compiled/point_2d_config_no_zero.svg b/examples/compiled/point_2d_config_no_zero.svg new file mode 100644 index 0000000000..8f599832fd --- /dev/null +++ b/examples/compiled/point_2d_config_no_zero.svg @@ -0,0 +1 @@ +050100150200Horsepower01020304050Miles_per_Gallon \ No newline at end of file diff --git a/examples/compiled/point_2d_config_no_zero.vg.json b/examples/compiled/point_2d_config_no_zero.vg.json new file mode 100644 index 0000000000..86c0194c92 --- /dev/null +++ b/examples/compiled/point_2d_config_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 + } + ] +} From 5fd4d071f81a7dacce325019f9fd385b422473d8 Mon Sep 17 00:00:00 2001 From: Younghoon Kim Date: Thu, 11 Aug 2022 17:48:15 -0700 Subject: [PATCH 3/7] Add config.scale.zero --- .../compiled/bar_gantt_config_no_zero.svg | 2 +- examples/compiled/point_2d_config_no_zero.svg | 2 +- examples/compiled/point_2d_no_zero.png | Bin 0 -> 28305 bytes examples/compiled/point_2d_no_zero.svg | 1 + src/compile/scale/properties.ts | 27 ++-- src/encoding.ts | 11 ++ test/compile/scale/properties.test.ts | 118 ++++++++++++++++-- test/encoding.test.ts | 21 ++++ 8 files changed, 164 insertions(+), 18 deletions(-) create mode 100644 examples/compiled/point_2d_no_zero.png create mode 100644 examples/compiled/point_2d_no_zero.svg diff --git a/examples/compiled/bar_gantt_config_no_zero.svg b/examples/compiled/bar_gantt_config_no_zero.svg index e39e6a2bfe..5be102e4fb 100644 --- a/examples/compiled/bar_gantt_config_no_zero.svg +++ b/examples/compiled/bar_gantt_config_no_zero.svg @@ -1 +1 @@ -0246810start, endABCtask \ No newline at end of file +0246810start, endABCtask diff --git a/examples/compiled/point_2d_config_no_zero.svg b/examples/compiled/point_2d_config_no_zero.svg index 8f599832fd..2ef9bdf1f9 100644 --- a/examples/compiled/point_2d_config_no_zero.svg +++ b/examples/compiled/point_2d_config_no_zero.svg @@ -1 +1 @@ -050100150200Horsepower01020304050Miles_per_Gallon \ No newline at end of file +050100150200Horsepower01020304050Miles_per_Gallon diff --git a/examples/compiled/point_2d_no_zero.png b/examples/compiled/point_2d_no_zero.png new file mode 100644 index 0000000000000000000000000000000000000000..ca059e1f123d5504c94a1432953abc45c09db1da GIT binary patch literal 28305 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 bkNORh^?Go3;u+{MhXR#SkSrHB`0~F1q&f=l literal 0 HcmV?d00001 diff --git a/examples/compiled/point_2d_no_zero.svg b/examples/compiled/point_2d_no_zero.svg new file mode 100644 index 0000000000..047fdd56c0 --- /dev/null +++ b/examples/compiled/point_2d_no_zero.svg @@ -0,0 +1 @@ +50100150200Horsepower1020304050Miles_per_Gallon \ No newline at end of file diff --git a/src/compile/scale/properties.ts b/src/compile/scale/properties.ts index 501e9dfe3f..cdfe3431b9 100644 --- a/src/compile/scale/properties.ts +++ b/src/compile/scale/properties.ts @@ -22,7 +22,7 @@ import { } from '../../channeldef'; import {Config} from '../../config'; import {isDateTime} from '../../datetime'; -import {channelHasNestedOffsetScale} from '../../encoding'; +import {channelHasNestedOffsetScale, encodingHasRangeChannels} from '../../encoding'; import * as log from '../../log'; import {Mark, MarkDef, RectConfig} from '../../mark'; import { @@ -120,7 +120,8 @@ function parseUnitScaleProperty(model: UnitModel, property: Exclude; config: Config; + hasRangeChannels: boolean; } export const scaleRules: { @@ -169,8 +171,8 @@ export const scaleRules: { const sort = isFieldDef(fieldOrDatumDef) ? fieldOrDatumDef.sort : undefined; return reverse(scaleType, sort, channel, config.scale); }, - zero: ({channel, fieldOrDatumDef, domain, markDef, scaleType}) => - zero(channel, fieldOrDatumDef, domain, markDef, scaleType) + zero: ({channel, fieldOrDatumDef, domain, markDef, scaleType, config, hasRangeChannels}) => + zero(channel, fieldOrDatumDef, domain, markDef, scaleType, config.scale, hasRangeChannels) }; // This method is here rather than in range.ts to avoid circular dependency. @@ -399,7 +401,9 @@ export function zero( fieldDef: TypedFieldDef | ScaleDatumDef, specifiedDomain: Domain, markDef: MarkDef, - scaleType: ScaleType + scaleType: ScaleType, + scaleConfig: ScaleConfig, + hasRangeChannels: boolean ) { // If users explicitly provide a domain, we should not augment zero as that will be unexpected. const hasCustomDomain = !!specifiedDomain && specifiedDomain !== 'unaggregated'; @@ -418,18 +422,21 @@ export function zero( } } - // If there is no custom domain, return true only for the following cases: + const defaultZero = scaleConfig?.zero === undefined ? true : scaleConfig?.zero; + + // If there is no custom domain, return configZero value (=`true` as default) only for the following cases: // 1) using quantitative field with size // While this can be either ratio or interval fields, our assumption is that // ratio are more common. However, if the scaleType is discretizing scale, we want to return // false so that range doesn't start at zero if (channel === 'size' && fieldDef.type === 'quantitative' && !isContinuousToDiscrete(scaleType)) { - return true; + return defaultZero; } // 2) non-binned, quantitative x-scale or y-scale // (For binning, we should not include zero by default because binning are calculated without zero.) + // (For area/bar charts with ratio scale chart, we should always include zero.) if ( !(isFieldDef(fieldDef) && fieldDef.bin) && util.contains([...POSITION_SCALE_CHANNELS, ...POLAR_POSITION_SCALE_CHANNELS], channel) @@ -441,7 +448,11 @@ export function zero( } } - return true; + if (contains(['bar', 'area'], type) && !hasRangeChannels) { + return true; + } + + return defaultZero; } return false; } diff --git a/src/encoding.ts b/src/encoding.ts index 062327f40d..2d9e7e9e5c 100644 --- a/src/encoding.ts +++ b/src/encoding.ts @@ -12,6 +12,7 @@ import { FILL, FILLOPACITY, getMainChannelFromOffsetChannel, + getMainRangeChannel, getOffsetScaleChannel, HREF, isChannel, @@ -28,6 +29,7 @@ import { ORDER, RADIUS, RADIUS2, + SECONDARY_RANGE_CHANNEL, SHAPE, SIZE, STROKE, @@ -369,6 +371,15 @@ export function channelHasNestedOffsetScale( } return false; } +export function encodingHasRangeChannels(encoding: EncodingWithFacet): boolean { + return some(SECONDARY_RANGE_CHANNEL, channel => { + if (channelHasField(encoding, channel)) { + const mainRangeChannel = getMainRangeChannel(channel); + return channelHasField(encoding, mainRangeChannel); + } + return false; + }); +} export function isAggregate(encoding: EncodingWithFacet) { return some(CHANNELS, channel => { diff --git a/test/compile/scale/properties.test.ts b/test/compile/scale/properties.test.ts index 82676906fc..04f2089dc5 100644 --- a/test/compile/scale/properties.test.ts +++ b/test/compile/scale/properties.test.ts @@ -201,22 +201,34 @@ describe('compile/scale', () => { describe('zero', () => { it('should return true when mapping a quantitative field to x with scale.domain = "unaggregated"', () => { expect( - rules.zero('x', {field: 'a', type: 'quantitative'}, 'unaggregated', {type: 'point'}, 'linear') + rules.zero('x', {field: 'a', type: 'quantitative'}, 'unaggregated', {type: 'point'}, 'linear', undefined, false) ).toBeTruthy(); }); it('should return true when mapping a quantitative field to size', () => { - expect(rules.zero('size', {field: 'a', type: 'quantitative'}, undefined, {type: 'point'}, 'linear')).toBeTruthy(); + expect( + rules.zero('size', {field: 'a', type: 'quantitative'}, undefined, {type: 'point'}, 'linear', undefined, false) + ).toBeTruthy(); }); it('should return false when mapping a ordinal field to size', () => { - expect(!rules.zero('size', {field: 'a', type: 'ordinal'}, undefined, {type: 'point'}, 'linear')).toBeTruthy(); + expect( + !rules.zero('size', {field: 'a', type: 'ordinal'}, undefined, {type: 'point'}, 'linear', undefined, false) + ).toBeTruthy(); }); it('should return true when mapping a non-binned quantitative field to x/y of point', () => { for (const channel of ['x', 'y'] as const) { expect( - rules.zero(channel, {field: 'a', type: 'quantitative'}, undefined, {type: 'point'}, 'linear') + rules.zero( + channel, + {field: 'a', type: 'quantitative'}, + undefined, + {type: 'point'}, + 'linear', + undefined, + false + ) ).toBeTruthy(); } }); @@ -224,10 +236,26 @@ describe('compile/scale', () => { it('should return false when mapping a quantitative field to dimension axis of bar, line, and area', () => { for (const mark of [BAR, AREA, LINE]) { expect( - rules.zero('x', {field: 'a', type: 'quantitative'}, undefined, {type: mark, orient: 'vertical'}, 'linear') + rules.zero( + 'x', + {field: 'a', type: 'quantitative'}, + undefined, + {type: mark, orient: 'vertical'}, + 'linear', + undefined, + false + ) ).toBe(false); expect( - rules.zero('y', {field: 'a', type: 'quantitative'}, undefined, {type: mark, orient: 'horizontal'}, 'linear') + rules.zero( + 'y', + {field: 'a', type: 'quantitative'}, + undefined, + {type: mark, orient: 'horizontal'}, + 'linear', + undefined, + false + ) ).toBe(false); } }); @@ -235,7 +263,15 @@ describe('compile/scale', () => { it('should return false when mapping a binned quantitative field to x/y', () => { for (const channel of ['x', 'y'] as const) { expect( - !rules.zero(channel, {bin: true, field: 'a', type: 'quantitative'}, undefined, {type: 'point'}, 'linear') + !rules.zero( + channel, + {bin: true, field: 'a', type: 'quantitative'}, + undefined, + {type: 'point'}, + 'linear', + undefined, + false + ) ).toBeTruthy(); } }); @@ -252,10 +288,76 @@ describe('compile/scale', () => { }, [3, 5], {type: 'point'}, - 'linear' + 'linear', + undefined, + false ) ).toBeTruthy(); } }); + + it(`should return config.scale.zero instead of true if it is specified`, () => { + const configZero = false; + for (const channel of ['x', 'y'] as const) { + expect( + rules.zero( + channel, + {field: 'a', type: 'quantitative'}, + undefined, + {type: 'point'}, + 'linear', + {zero: configZero}, + false + ) + ).toBe(configZero); + } + + expect( + rules.zero( + 'size', + {field: 'a', type: 'quantitative'}, + undefined, + {type: 'point'}, + 'linear', + {zero: configZero}, + false + ) + ).toBe(configZero); + + expect( + rules.zero( + 'size', + {field: 'a', type: 'ordinal'}, + undefined, + {type: 'point'}, + 'linear', + {zero: configZero}, + false + ) + ).toBe(configZero); + + // ranged bar/area should take default configZero + expect( + rules.zero('x', {field: 'a', type: 'quantitative'}, undefined, {type: BAR}, 'linear', {zero: configZero}, true) + ).toBe(configZero); + }); + + it(`should return true for non-ranged are/bar chart regardless to config`, () => { + for (const mark of [BAR, AREA]) { + for (const channel of ['x', 'y'] as const) { + expect( + rules.zero( + channel, + {field: 'a', type: 'quantitative'}, + undefined, + {type: mark}, + 'linear', + {zero: false}, + false + ) + ).toBe(true); + } + } + }); }); }); diff --git a/test/encoding.test.ts b/test/encoding.test.ts index da7db3aaab..ad1b3a8852 100644 --- a/test/encoding.test.ts +++ b/test/encoding.test.ts @@ -14,6 +14,7 @@ import {isPositionFieldOrDatumDef} from '../src/channeldef'; import {defaultConfig} from '../src/config'; import { Encoding, + encodingHasRangeChannels, extractTransformsFromEncoding, fieldDefs, initEncoding, @@ -544,4 +545,24 @@ describe('encoding', () => { ]); }); }); + + describe('encodingHasRangeChannels', () => { + it('should return true if encoding has a pair of range channels', () => { + expect( + encodingHasRangeChannels({ + x: {field: 'foo', type: 'quantitative'}, + x2: {field: 'boo', type: 'quantitative'} + }) + ).toBeTruthy(); + }); + + it('should return false if encoding does not have a pair of range channels', () => { + expect( + encodingHasRangeChannels({ + x: {field: 'foo', type: 'quantitative'}, + y2: {field: 'boo', type: 'quantitative'} + }) + ).toBeFalsy(); + }); + }); }); From fd8e6171ad9cabf1a7fd9f402439c5e076ca2b77 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot Date: Fri, 12 Aug 2022 00:51:41 +0000 Subject: [PATCH 4/7] chore: update examples [CI] --- .../compiled/bar_gantt_config_no_zero.png | Bin 3940 -> 3991 bytes .../compiled/bar_gantt_config_no_zero.svg | 4 ++++ .../compiled/bar_gantt_config_no_zero.vg.json | 2 +- examples/compiled/point_2d_config_no_zero.png | Bin 26321 -> 28538 bytes examples/compiled/point_2d_config_no_zero.svg | 4 ++++ .../compiled/point_2d_config_no_zero.vg.json | 4 ++-- examples/compiled/point_2d_no_zero.png | Bin 28305 -> 0 bytes examples/compiled/point_2d_no_zero.svg | 1 - 8 files changed, 11 insertions(+), 4 deletions(-) delete mode 100644 examples/compiled/point_2d_no_zero.png delete mode 100644 examples/compiled/point_2d_no_zero.svg diff --git a/examples/compiled/bar_gantt_config_no_zero.png b/examples/compiled/bar_gantt_config_no_zero.png index 4588a939592b08e5449c4ab37bf2e0a70cdcf127..96b20dd9409168b2547ad67c8f6b641bc4f22c9a 100644 GIT binary patch literal 3991 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 AL;wH) literal 3940 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 W==hyS+WX+x3|%n1h +======= +246810start, endABCtask +>>>>>>> Stashed changes diff --git a/examples/compiled/bar_gantt_config_no_zero.vg.json b/examples/compiled/bar_gantt_config_no_zero.vg.json index 4fd65adfac..47a431f9b6 100644 --- a/examples/compiled/bar_gantt_config_no_zero.vg.json +++ b/examples/compiled/bar_gantt_config_no_zero.vg.json @@ -60,7 +60,7 @@ "domain": {"data": "data_0", "fields": ["start", "end"]}, "range": [0, {"signal": "width"}], "nice": true, - "zero": true + "zero": false }, { "name": "y", diff --git a/examples/compiled/point_2d_config_no_zero.png b/examples/compiled/point_2d_config_no_zero.png index 7d1e7dff5de772fdc4ce6cf85b58fcb4dc6ea6a8..868a9d1b5c9f8155690f1beb0d49b47cf04ea944 100644 GIT binary patch literal 28538 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

?d4MhplNLR;;ElI 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 literal 26321 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 qbs@g9p!mVlNK}Y@4ESFy$Pg|7 diff --git a/examples/compiled/point_2d_config_no_zero.svg b/examples/compiled/point_2d_config_no_zero.svg index 2ef9bdf1f9..80ccd7f99b 100644 --- a/examples/compiled/point_2d_config_no_zero.svg +++ b/examples/compiled/point_2d_config_no_zero.svg @@ -1 +1,5 @@ +<<<<<<< Updated upstream 050100150200Horsepower01020304050Miles_per_Gallon +======= +50100150200Horsepower1020304050Miles_per_Gallon +>>>>>>> Stashed changes diff --git a/examples/compiled/point_2d_config_no_zero.vg.json b/examples/compiled/point_2d_config_no_zero.vg.json index 86c0194c92..b6de1de0d2 100644 --- a/examples/compiled/point_2d_config_no_zero.vg.json +++ b/examples/compiled/point_2d_config_no_zero.vg.json @@ -47,7 +47,7 @@ "domain": {"data": "source_0", "field": "Horsepower"}, "range": [0, {"signal": "width"}], "nice": true, - "zero": true + "zero": false }, { "name": "y", @@ -55,7 +55,7 @@ "domain": {"data": "source_0", "field": "Miles_per_Gallon"}, "range": [{"signal": "height"}, 0], "nice": true, - "zero": true + "zero": false } ], "axes": [ diff --git a/examples/compiled/point_2d_no_zero.png b/examples/compiled/point_2d_no_zero.png deleted file mode 100644 index ca059e1f123d5504c94a1432953abc45c09db1da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28305 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 bkNORh^?Go3;u+{MhXR#SkSrHB`0~F1q&f=l diff --git a/examples/compiled/point_2d_no_zero.svg b/examples/compiled/point_2d_no_zero.svg deleted file mode 100644 index 047fdd56c0..0000000000 --- a/examples/compiled/point_2d_no_zero.svg +++ /dev/null @@ -1 +0,0 @@ -50100150200Horsepower1020304050Miles_per_Gallon \ No newline at end of file From acef7092d2b4ddcc9f3859580f2a353f5af145ff Mon Sep 17 00:00:00 2001 From: Younghoon Kim Date: Thu, 11 Aug 2022 19:25:03 -0700 Subject: [PATCH 5/7] update doc --- site/docs/encoding/scale.md | 2 +- src/scale.ts | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/site/docs/encoding/scale.md b/site/docs/encoding/scale.md index 847a2d6316..43eecd4774 100644 --- a/site/docs/encoding/scale.md +++ b/site/docs/encoding/scale.md @@ -444,7 +444,7 @@ To provide themes for all scales, the scale config (`config: {scale: {...}}`) ca #### Padding -{% include table.html props="bandPaddingInner,barBandPaddingInner,rectBandPaddingInner,bandWithNestedOffsetPaddingInner,offsetBandPaddingInner,bandPaddingOuter,bandWithNestedOffsetPaddingOuter,offsetBandPaddingOuter,continuousPadding,pointPadding" source="ScaleConfig" %} +{% include table.html props="bandPaddingInner,barBandPaddingInner,rectBandPaddingInner,bandWithNestedOffsetPaddingInner,offsetBandPaddingInner,bandPaddingOuter,bandWithNestedOffsetPaddingOuter,offsetBandPaddingOuter,continuousPadding,pointPadding,zero" source="ScaleConfig" %} #### Range diff --git a/src/scale.ts b/src/scale.ts index fe4f8f3ee4..33bff5333e 100644 --- a/src/scale.ts +++ b/src/scale.ts @@ -417,8 +417,7 @@ export interface ScaleConfig { xReverse?: boolean | ES; /** - * Default for ensuring that a zero baseline values for [`quantize`](https://vega.github.io/vega-lite/docs/scale.html#quantize) scale. - * + * Override the default `scale.zero` for [`continuous`](https://vega.github.io/vega-lite/docs/scale.html#continuous) scale except for non-ranged bar or area charts. * * __Default value:__ `true` * From 2c8cc57dfdf3716b84f0d220e11470fcfb8543ff Mon Sep 17 00:00:00 2001 From: Younghoon Kim Date: Mon, 15 Aug 2022 16:01:06 -0700 Subject: [PATCH 6/7] Minor refactor: - Undo encodingHasRangeChannels - Set `true` for continuous size scale regardless to config - Fix doc --- build/vega-lite-schema.json | 2 +- site/docs/encoding/scale.md | 4 +-- src/compile/scale/properties.ts | 22 ++++++++-------- src/encoding.ts | 11 -------- src/scale.ts | 6 +++-- test/compile/scale/properties.test.ts | 36 ++++++++++++++------------- test/encoding.test.ts | 21 ---------------- 7 files changed, 37 insertions(+), 65 deletions(-) diff --git a/build/vega-lite-schema.json b/build/vega-lite-schema.json index d8693f4c5d..e5eb25aa47 100644 --- a/build/vega-lite-schema.json +++ b/build/vega-lite-schema.json @@ -21610,7 +21610,7 @@ "description": "Reverse x-scale by default (useful for right-to-left charts)." }, "zero": { - "description": "Default for ensuring that a zero baseline values for [`quantize`](https://vega.github.io/vega-lite/docs/scale.html#quantize) scale.\n\n\n__Default value:__ `true`", + "description": "Override the default `scale.zero` for [`continuous`](https://vega.github.io/vega-lite/docs/scale.html#continuous) scales except for (1) x/y-scales of non-ranged bar or area charts and (2) size scales.\n\n__Default value:__ `true`", "type": "boolean" } }, diff --git a/site/docs/encoding/scale.md b/site/docs/encoding/scale.md index 43eecd4774..1b12563b27 100644 --- a/site/docs/encoding/scale.md +++ b/site/docs/encoding/scale.md @@ -444,7 +444,7 @@ To provide themes for all scales, the scale config (`config: {scale: {...}}`) ca #### Padding -{% include table.html props="bandPaddingInner,barBandPaddingInner,rectBandPaddingInner,bandWithNestedOffsetPaddingInner,offsetBandPaddingInner,bandPaddingOuter,bandWithNestedOffsetPaddingOuter,offsetBandPaddingOuter,continuousPadding,pointPadding,zero" source="ScaleConfig" %} +{% include table.html props="bandPaddingInner,barBandPaddingInner,rectBandPaddingInner,bandWithNestedOffsetPaddingInner,offsetBandPaddingInner,bandPaddingOuter,bandWithNestedOffsetPaddingOuter,offsetBandPaddingOuter,continuousPadding,pointPadding" source="ScaleConfig" %} #### Range @@ -452,7 +452,7 @@ To provide themes for all scales, the scale config (`config: {scale: {...}}`) ca #### Other -{% include table.html props="clamp,round,xReverse,useUnaggregatedDomain" source="ScaleConfig" %} +{% include table.html props="clamp,round,xReverse,useUnaggregatedDomain,zero" source="ScaleConfig" %} {:#range-config} diff --git a/src/compile/scale/properties.ts b/src/compile/scale/properties.ts index cdfe3431b9..e4463fdd34 100644 --- a/src/compile/scale/properties.ts +++ b/src/compile/scale/properties.ts @@ -4,6 +4,7 @@ import {isBinned, isBinning, isBinParams} from '../../bin'; import { COLOR, FILL, + getSecondaryRangeChannel, isXorY, isXorYOffset, POLAR_POSITION_SCALE_CHANNELS, @@ -22,7 +23,7 @@ import { } from '../../channeldef'; import {Config} from '../../config'; import {isDateTime} from '../../datetime'; -import {channelHasNestedOffsetScale, encodingHasRangeChannels} from '../../encoding'; +import {channelHasNestedOffsetScale} from '../../encoding'; import * as log from '../../log'; import {Mark, MarkDef, RectConfig} from '../../mark'; import { @@ -121,7 +122,7 @@ function parseUnitScaleProperty(model: UnitModel, property: Exclude; config: Config; - hasRangeChannels: boolean; + hasSecondaryRangeChannel: boolean; } export const scaleRules: { @@ -171,8 +172,8 @@ export const scaleRules: { const sort = isFieldDef(fieldOrDatumDef) ? fieldOrDatumDef.sort : undefined; return reverse(scaleType, sort, channel, config.scale); }, - zero: ({channel, fieldOrDatumDef, domain, markDef, scaleType, config, hasRangeChannels}) => - zero(channel, fieldOrDatumDef, domain, markDef, scaleType, config.scale, hasRangeChannels) + zero: ({channel, fieldOrDatumDef, domain, markDef, scaleType, config, hasSecondaryRangeChannel}) => + zero(channel, fieldOrDatumDef, domain, markDef, scaleType, config.scale, hasSecondaryRangeChannel) }; // This method is here rather than in range.ts to avoid circular dependency. @@ -403,7 +404,7 @@ export function zero( markDef: MarkDef, scaleType: ScaleType, scaleConfig: ScaleConfig, - hasRangeChannels: boolean + hasSecondaryRangeChannel: boolean ) { // If users explicitly provide a domain, we should not augment zero as that will be unexpected. const hasCustomDomain = !!specifiedDomain && specifiedDomain !== 'unaggregated'; @@ -422,8 +423,6 @@ export function zero( } } - const defaultZero = scaleConfig?.zero === undefined ? true : scaleConfig?.zero; - // If there is no custom domain, return configZero value (=`true` as default) only for the following cases: // 1) using quantitative field with size @@ -431,7 +430,7 @@ export function zero( // ratio are more common. However, if the scaleType is discretizing scale, we want to return // false so that range doesn't start at zero if (channel === 'size' && fieldDef.type === 'quantitative' && !isContinuousToDiscrete(scaleType)) { - return defaultZero; + return true; } // 2) non-binned, quantitative x-scale or y-scale @@ -448,11 +447,12 @@ export function zero( } } - if (contains(['bar', 'area'], type) && !hasRangeChannels) { + if (contains(['bar', 'area'], type) && !hasSecondaryRangeChannel) { return true; } - return defaultZero; + return scaleConfig?.zero; } + return false; } diff --git a/src/encoding.ts b/src/encoding.ts index 2d9e7e9e5c..062327f40d 100644 --- a/src/encoding.ts +++ b/src/encoding.ts @@ -12,7 +12,6 @@ import { FILL, FILLOPACITY, getMainChannelFromOffsetChannel, - getMainRangeChannel, getOffsetScaleChannel, HREF, isChannel, @@ -29,7 +28,6 @@ import { ORDER, RADIUS, RADIUS2, - SECONDARY_RANGE_CHANNEL, SHAPE, SIZE, STROKE, @@ -371,15 +369,6 @@ export function channelHasNestedOffsetScale( } return false; } -export function encodingHasRangeChannels(encoding: EncodingWithFacet): boolean { - return some(SECONDARY_RANGE_CHANNEL, channel => { - if (channelHasField(encoding, channel)) { - const mainRangeChannel = getMainRangeChannel(channel); - return channelHasField(encoding, mainRangeChannel); - } - return false; - }); -} export function isAggregate(encoding: EncodingWithFacet) { return some(CHANNELS, channel => { diff --git a/src/scale.ts b/src/scale.ts index 33bff5333e..c07e87cfe5 100644 --- a/src/scale.ts +++ b/src/scale.ts @@ -417,7 +417,7 @@ export interface ScaleConfig { xReverse?: boolean | ES; /** - * Override the default `scale.zero` for [`continuous`](https://vega.github.io/vega-lite/docs/scale.html#continuous) scale except for non-ranged bar or area charts. + * Override the default `scale.zero` for [`continuous`](https://vega.github.io/vega-lite/docs/scale.html#continuous) scales except for (1) x/y-scales of non-ranged bar or area charts and (2) size scales. * * __Default value:__ `true` * @@ -447,7 +447,9 @@ export const defaultScaleConfig: ScaleConfig = { minStrokeWidth: 1, maxStrokeWidth: 4, quantileCount: 4, - quantizeCount: 4 + quantizeCount: 4, + + zero: true }; export interface SchemeParams { diff --git a/test/compile/scale/properties.test.ts b/test/compile/scale/properties.test.ts index 04f2089dc5..3d6a79891e 100644 --- a/test/compile/scale/properties.test.ts +++ b/test/compile/scale/properties.test.ts @@ -199,10 +199,10 @@ describe('compile/scale', () => { }); describe('zero', () => { - it('should return true when mapping a quantitative field to x with scale.domain = "unaggregated"', () => { + it('should return default (undefined) when mapping a quantitative field to x with scale.domain = "unaggregated"', () => { expect( rules.zero('x', {field: 'a', type: 'quantitative'}, 'unaggregated', {type: 'point'}, 'linear', undefined, false) - ).toBeTruthy(); + ).toBeUndefined(); }); it('should return true when mapping a quantitative field to size', () => { @@ -217,7 +217,7 @@ describe('compile/scale', () => { ).toBeTruthy(); }); - it('should return true when mapping a non-binned quantitative field to x/y of point', () => { + it('should return default (undefined) when mapping a non-binned quantitative field to x/y of point', () => { for (const channel of ['x', 'y'] as const) { expect( rules.zero( @@ -229,7 +229,7 @@ describe('compile/scale', () => { undefined, false ) - ).toBeTruthy(); + ).toBeUndefined(); } }); @@ -312,18 +312,6 @@ describe('compile/scale', () => { ).toBe(configZero); } - expect( - rules.zero( - 'size', - {field: 'a', type: 'quantitative'}, - undefined, - {type: 'point'}, - 'linear', - {zero: configZero}, - false - ) - ).toBe(configZero); - expect( rules.zero( 'size', @@ -342,7 +330,7 @@ describe('compile/scale', () => { ).toBe(configZero); }); - it(`should return true for non-ranged are/bar chart regardless to config`, () => { + it(`should return true for x/y scales of the non-ranged are/bar charts regardless to config`, () => { for (const mark of [BAR, AREA]) { for (const channel of ['x', 'y'] as const) { expect( @@ -359,5 +347,19 @@ describe('compile/scale', () => { } } }); + + it(`should return true for the continuous & quantitative size scale regardless to config`, () => { + expect( + rules.zero( + 'size', + {field: 'a', type: 'quantitative'}, + undefined, + {type: 'point'}, + 'linear', + {zero: false}, + false + ) + ).toBe(true); + }); }); }); diff --git a/test/encoding.test.ts b/test/encoding.test.ts index ad1b3a8852..da7db3aaab 100644 --- a/test/encoding.test.ts +++ b/test/encoding.test.ts @@ -14,7 +14,6 @@ import {isPositionFieldOrDatumDef} from '../src/channeldef'; import {defaultConfig} from '../src/config'; import { Encoding, - encodingHasRangeChannels, extractTransformsFromEncoding, fieldDefs, initEncoding, @@ -545,24 +544,4 @@ describe('encoding', () => { ]); }); }); - - describe('encodingHasRangeChannels', () => { - it('should return true if encoding has a pair of range channels', () => { - expect( - encodingHasRangeChannels({ - x: {field: 'foo', type: 'quantitative'}, - x2: {field: 'boo', type: 'quantitative'} - }) - ).toBeTruthy(); - }); - - it('should return false if encoding does not have a pair of range channels', () => { - expect( - encodingHasRangeChannels({ - x: {field: 'foo', type: 'quantitative'}, - y2: {field: 'boo', type: 'quantitative'} - }) - ).toBeFalsy(); - }); - }); }); From 672985384d435082b28f12bf9d293a857320727e Mon Sep 17 00:00:00 2001 From: Younghoon Kim Date: Tue, 16 Aug 2022 10:03:37 -0700 Subject: [PATCH 7/7] Update the doc and fix the typo --- build/vega-lite-schema.json | 2 +- src/scale.ts | 2 +- test/compile/scale/properties.test.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build/vega-lite-schema.json b/build/vega-lite-schema.json index e5eb25aa47..0c932bf1a0 100644 --- a/build/vega-lite-schema.json +++ b/build/vega-lite-schema.json @@ -21610,7 +21610,7 @@ "description": "Reverse x-scale by default (useful for right-to-left charts)." }, "zero": { - "description": "Override the default `scale.zero` for [`continuous`](https://vega.github.io/vega-lite/docs/scale.html#continuous) scales except for (1) x/y-scales of non-ranged bar or area charts and (2) size scales.\n\n__Default value:__ `true`", + "description": "Default `scale.zero` for [`continuous`](https://vega.github.io/vega-lite/docs/scale.html#continuous) scales except for (1) x/y-scales of non-ranged bar or area charts and (2) size scales.\n\n__Default value:__ `true`", "type": "boolean" } }, diff --git a/src/scale.ts b/src/scale.ts index c07e87cfe5..c90e7b1342 100644 --- a/src/scale.ts +++ b/src/scale.ts @@ -417,7 +417,7 @@ export interface ScaleConfig { xReverse?: boolean | ES; /** - * Override the default `scale.zero` for [`continuous`](https://vega.github.io/vega-lite/docs/scale.html#continuous) scales except for (1) x/y-scales of non-ranged bar or area charts and (2) size scales. + * Default `scale.zero` for [`continuous`](https://vega.github.io/vega-lite/docs/scale.html#continuous) scales except for (1) x/y-scales of non-ranged bar or area charts and (2) size scales. * * __Default value:__ `true` * diff --git a/test/compile/scale/properties.test.ts b/test/compile/scale/properties.test.ts index 3d6a79891e..1129cfc0fa 100644 --- a/test/compile/scale/properties.test.ts +++ b/test/compile/scale/properties.test.ts @@ -330,7 +330,7 @@ describe('compile/scale', () => { ).toBe(configZero); }); - it(`should return true for x/y scales of the non-ranged are/bar charts regardless to config`, () => { + it(`should return true for x/y scales of the non-ranged area/bar charts regardless to config`, () => { for (const mark of [BAR, AREA]) { for (const channel of ['x', 'y'] as const) { expect(