From 237d9384ec1dda14314cb99f6fa6867c897eee91 Mon Sep 17 00:00:00 2001 From: Kanit Wongsuphasawat Date: Tue, 27 Aug 2024 15:21:01 -0700 Subject: [PATCH 1/6] doc(examples): add problematic examples --- examples/specs/tick_histogram.vl.json | 12 ++++++++++++ examples/specs/tick_timeunit.vl.json | 11 +++++++++++ 2 files changed, 23 insertions(+) create mode 100644 examples/specs/tick_histogram.vl.json create mode 100644 examples/specs/tick_timeunit.vl.json diff --git a/examples/specs/tick_histogram.vl.json b/examples/specs/tick_histogram.vl.json new file mode 100644 index 0000000000..6dcde28932 --- /dev/null +++ b/examples/specs/tick_histogram.vl.json @@ -0,0 +1,12 @@ +{ + "$schema": "https://vega.github.io/schema/vega-lite/v5.json", + "data": {"url": "data/movies.json"}, + "mark": "tick", + "encoding": { + "x": { + "bin": true, + "field": "IMDB Rating" + }, + "y": {"aggregate": "count"} + } +} diff --git a/examples/specs/tick_timeunit.vl.json b/examples/specs/tick_timeunit.vl.json new file mode 100644 index 0000000000..6cb3a7d92d --- /dev/null +++ b/examples/specs/tick_timeunit.vl.json @@ -0,0 +1,11 @@ +{ + "$schema": "https://vega.github.io/schema/vega-lite/v5.json", + "description": "Google's stock price over time.", + "data": {"url": "data/stocks.csv"}, + "transform": [{"filter": "datum.symbol==='GOOG'"}], + "mark": "tick", + "encoding": { + "x": {"timeUnit": "year", "field": "date", "type": "temporal"}, + "y": {"aggregate": "sum", "field": "price", "type": "quantitative"} + } +} From bdc21e9fcdf10f8ba868ce5b6b1c1169c134ba1b Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot Date: Tue, 27 Aug 2024 22:39:09 +0000 Subject: [PATCH 2/6] chore: update examples [CI] --- examples/compiled/tick_histogram.png | Bin 0 -> 11332 bytes examples/compiled/tick_histogram.svg | 1 + examples/compiled/tick_histogram.vg.json | 125 +++++++++++++++++++++ examples/compiled/tick_timeunit.png | Bin 0 -> 12741 bytes examples/compiled/tick_timeunit.svg | 1 + examples/compiled/tick_timeunit.vg.json | 131 +++++++++++++++++++++++ 6 files changed, 258 insertions(+) create mode 100644 examples/compiled/tick_histogram.png create mode 100644 examples/compiled/tick_histogram.svg create mode 100644 examples/compiled/tick_histogram.vg.json create mode 100644 examples/compiled/tick_timeunit.png create mode 100644 examples/compiled/tick_timeunit.svg create mode 100644 examples/compiled/tick_timeunit.vg.json diff --git a/examples/compiled/tick_histogram.png b/examples/compiled/tick_histogram.png new file mode 100644 index 0000000000000000000000000000000000000000..caeb22c8306de36aedfcbaede4af31a954c81363 GIT binary patch literal 11332 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 \ No newline at end of file diff --git a/examples/compiled/tick_histogram.vg.json b/examples/compiled/tick_histogram.vg.json new file mode 100644 index 0000000000..bc19724860 --- /dev/null +++ b/examples/compiled/tick_histogram.vg.json @@ -0,0 +1,125 @@ +{ + "$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/movies.json", + "format": {"type": "json"}, + "transform": [ + { + "type": "extent", + "field": "IMDB Rating", + "signal": "bin_maxbins_10_IMDB_Rating_extent" + }, + { + "type": "bin", + "field": "IMDB Rating", + "as": [ + "bin_maxbins_10_IMDB Rating", + "bin_maxbins_10_IMDB Rating_end" + ], + "signal": "bin_maxbins_10_IMDB_Rating_bins", + "extent": {"signal": "bin_maxbins_10_IMDB_Rating_extent"}, + "maxbins": 10 + }, + { + "type": "aggregate", + "groupby": [ + "bin_maxbins_10_IMDB Rating", + "bin_maxbins_10_IMDB Rating_end" + ], + "ops": ["count"], + "fields": [null], + "as": ["__count"] + }, + { + "type": "filter", + "expr": "isValid(datum[\"bin_maxbins_10_IMDB Rating\"]) && isFinite(+datum[\"bin_maxbins_10_IMDB Rating\"])" + } + ] + } + ], + "marks": [ + { + "name": "marks", + "type": "rect", + "style": ["tick"], + "from": {"data": "source_0"}, + "encode": { + "update": { + "fill": {"value": "#4c78a8"}, + "ariaRoleDescription": {"value": "tick"}, + "description": { + "signal": "\"IMDB Rating (binned): \" + (!isValid(datum[\"bin_maxbins_10_IMDB Rating\"]) || !isFinite(+datum[\"bin_maxbins_10_IMDB Rating\"]) ? \"null\" : format(datum[\"bin_maxbins_10_IMDB Rating\"], \"\") + \" – \" + format(datum[\"bin_maxbins_10_IMDB Rating_end\"], \"\")) + \"; Count of Records: \" + (format(datum[\"__count\"], \"\"))" + }, + "xc": { + "signal": "scale(\"x\", 0.5 * datum[\"bin_maxbins_10_IMDB Rating\"] + 0.5 * datum[\"bin_maxbins_10_IMDB Rating_end\"])" + }, + "yc": {"scale": "y", "field": "__count"}, + "width": {"signal": "(1 - 0.25) * width"}, + "height": {"value": 1} + } + } + } + ], + "scales": [ + { + "name": "x", + "type": "linear", + "domain": { + "signal": "[bin_maxbins_10_IMDB_Rating_bins.start, bin_maxbins_10_IMDB_Rating_bins.stop]" + }, + "range": [0, {"signal": "width"}], + "bins": {"signal": "bin_maxbins_10_IMDB_Rating_bins"}, + "zero": false + }, + { + "name": "y", + "type": "linear", + "domain": {"data": "source_0", "field": "__count"}, + "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": "IMDB Rating (binned)", + "labelFlush": true, + "labelOverlap": true, + "tickCount": {"signal": "ceil(width/10)"}, + "zindex": 0 + }, + { + "scale": "y", + "orient": "left", + "grid": false, + "title": "Count of Records", + "labelOverlap": true, + "tickCount": {"signal": "ceil(height/40)"}, + "zindex": 0 + } + ] +} diff --git a/examples/compiled/tick_timeunit.png b/examples/compiled/tick_timeunit.png new file mode 100644 index 0000000000000000000000000000000000000000..827505fbf0c0497cce3816e916d8984039cbb5dd GIT binary patch literal 12741 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 literal 0 HcmV?d00001 diff --git a/examples/compiled/tick_timeunit.svg b/examples/compiled/tick_timeunit.svg new file mode 100644 index 0000000000..9338b1e40a --- /dev/null +++ b/examples/compiled/tick_timeunit.svg @@ -0,0 +1 @@ +2004200520062007200820092010date (year)01,0002,0003,0004,0005,0006,0007,000Sum of price \ No newline at end of file diff --git a/examples/compiled/tick_timeunit.vg.json b/examples/compiled/tick_timeunit.vg.json new file mode 100644 index 0000000000..e5b840c35b --- /dev/null +++ b/examples/compiled/tick_timeunit.vg.json @@ -0,0 +1,131 @@ +{ + "$schema": "https://vega.github.io/schema/vega/v5.json", + "description": "Google's stock price over time.", + "background": "white", + "padding": 5, + "width": 200, + "height": 200, + "style": "cell", + "data": [ + { + "name": "source_0", + "url": "data/stocks.csv", + "format": {"type": "csv", "parse": {"date": "date"}}, + "transform": [ + {"type": "filter", "expr": "datum.symbol==='GOOG'"}, + { + "field": "date", + "type": "timeunit", + "units": ["year"], + "as": ["year_date", "year_date_end"] + }, + { + "type": "aggregate", + "groupby": ["year_date"], + "ops": ["sum"], + "fields": ["price"], + "as": ["sum_price"] + }, + { + "type": "filter", + "expr": "(isDate(datum[\"year_date\"]) || (isValid(datum[\"year_date\"]) && isFinite(+datum[\"year_date\"]))) && isValid(datum[\"sum_price\"]) && isFinite(+datum[\"sum_price\"])" + } + ] + } + ], + "marks": [ + { + "name": "marks", + "type": "rect", + "style": ["tick"], + "from": {"data": "source_0"}, + "encode": { + "update": { + "fill": {"value": "#4c78a8"}, + "ariaRoleDescription": {"value": "tick"}, + "description": { + "signal": "\"date (year): \" + (timeFormat(datum[\"year_date\"], timeUnitSpecifier([\"year\"], {\"year-month\":\"%b %Y \",\"year-month-date\":\"%b %d, %Y \"}))) + \"; Sum of price: \" + (format(datum[\"sum_price\"], \"\"))" + }, + "xc": {"scale": "x", "field": "year_date"}, + "yc": {"scale": "y", "field": "sum_price"}, + "width": {"signal": "(1 - 0.25) * width"}, + "height": {"value": 1} + } + } + } + ], + "scales": [ + { + "name": "x", + "type": "time", + "domain": {"data": "source_0", "field": "year_date"}, + "range": [0, {"signal": "width"}] + }, + { + "name": "y", + "type": "linear", + "domain": {"data": "source_0", "field": "sum_price"}, + "range": [{"signal": "height"}, 0], + "nice": true, + "zero": true + } + ], + "axes": [ + { + "scale": "x", + "orient": "bottom", + "gridScale": "y", + "grid": true, + "tickCount": {"signal": "ceil(width/40)"}, + "tickMinStep": { + "signal": "datetime(2002, 0, 1, 0, 0, 0, 0) - datetime(2001, 0, 1, 0, 0, 0, 0)" + }, + "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": "date (year)", + "format": { + "signal": "timeUnitSpecifier([\"year\"], {\"year-month\":\"%b %Y \",\"year-month-date\":\"%b %d, %Y \"})" + }, + "labelFlush": true, + "labelOverlap": true, + "tickCount": {"signal": "ceil(width/40)"}, + "tickMinStep": { + "signal": "datetime(2002, 0, 1, 0, 0, 0, 0) - datetime(2001, 0, 1, 0, 0, 0, 0)" + }, + "zindex": 0 + }, + { + "scale": "y", + "orient": "left", + "grid": false, + "title": "Sum of price", + "labelOverlap": true, + "tickCount": {"signal": "ceil(height/40)"}, + "zindex": 0 + } + ] +} From 14454047b0a216463ea7cf35b3223c87481724d5 Mon Sep 17 00:00:00 2001 From: Kanit Wongsuphasawat Date: Tue, 27 Aug 2024 16:20:01 -0700 Subject: [PATCH 3/6] doc(examples): add problematic examples for #7724 --- examples/specs/tick_width_band.vl.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 examples/specs/tick_width_band.vl.json diff --git a/examples/specs/tick_width_band.vl.json b/examples/specs/tick_width_band.vl.json new file mode 100644 index 0000000000..6b9500197a --- /dev/null +++ b/examples/specs/tick_width_band.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} + ] + }, + "width": {"step": 50}, + "mark": {"type": "tick", "width": {"band": 0.5}}, + "encoding": { + "x": {"field": "a", "type": "nominal", "axis": {"labelAngle": 0}}, + "y": {"field": "b", "type": "quantitative"} + } +} From 3967b82192930df78632520f9ec483e26fc93208 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot Date: Tue, 27 Aug 2024 23:22:15 +0000 Subject: [PATCH 4/6] chore: update examples [CI] --- examples/compiled/tick_width_band.png | Bin 0 -> 5544 bytes examples/compiled/tick_width_band.svg | 1 + examples/compiled/tick_width_band.vg.json | 115 ++++++++++++++++++++++ 3 files changed, 116 insertions(+) create mode 100644 examples/compiled/tick_width_band.png create mode 100644 examples/compiled/tick_width_band.svg create mode 100644 examples/compiled/tick_width_band.vg.json diff --git a/examples/compiled/tick_width_band.png b/examples/compiled/tick_width_band.png new file mode 100644 index 0000000000000000000000000000000000000000..daa9b0baf3984a6de662a9fec80e67d0e5891c0e GIT binary patch literal 5544 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 literal 0 HcmV?d00001 diff --git a/examples/compiled/tick_width_band.svg b/examples/compiled/tick_width_band.svg new file mode 100644 index 0000000000..b2c50e4a56 --- /dev/null +++ b/examples/compiled/tick_width_band.svg @@ -0,0 +1 @@ +ABCDEFGHIa020406080100b \ No newline at end of file diff --git a/examples/compiled/tick_width_band.vg.json b/examples/compiled/tick_width_band.vg.json new file mode 100644 index 0000000000..549c70dd1b --- /dev/null +++ b/examples/compiled/tick_width_band.vg.json @@ -0,0 +1,115 @@ +{ + "$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": "filter", + "expr": "isValid(datum[\"b\"]) && isFinite(+datum[\"b\"])" + } + ] + } + ], + "signals": [ + {"name": "x_step", "value": 50}, + { + "name": "width", + "update": "bandspace(domain('x').length, 0.25, 0.125) * x_step" + } + ], + "marks": [ + { + "name": "marks", + "type": "rect", + "style": ["tick"], + "from": {"data": "data_0"}, + "encode": { + "update": { + "opacity": {"value": 0.7}, + "fill": {"value": "#4c78a8"}, + "ariaRoleDescription": {"value": "tick"}, + "description": { + "signal": "\"a: \" + (isValid(datum[\"a\"]) ? datum[\"a\"] : \"\"+datum[\"a\"]) + \"; b: \" + (format(datum[\"b\"], \"\"))" + }, + "xc": {"scale": "x", "field": "a", "band": 0.5}, + "yc": {"scale": "y", "field": "b"}, + "width": {"value": {"band": 0.5}}, + "height": {"value": 1} + } + } + } + ], + "scales": [ + { + "name": "x", + "type": "band", + "domain": {"data": "data_0", "field": "a", "sort": true}, + "range": {"step": {"signal": "x_step"}}, + "paddingInner": 0.25, + "paddingOuter": 0.125 + }, + { + "name": "y", + "type": "linear", + "domain": {"data": "data_0", "field": "b"}, + "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 + } + ] +} From c0a15b0bcb89d46071e158b9c103e575ad51f738 Mon Sep 17 00:00:00 2001 From: Kanit Wongsuphasawat Date: Tue, 27 Aug 2024 16:24:34 -0700 Subject: [PATCH 5/6] fix(#7724,#9414): Make ticks respect bin/timeUnit bands and custom bands --- build/vega-lite-schema.json | 33 +++++++++++++++ src/compile/mark/encode/position-rect.ts | 21 +++++++--- src/compile/mark/tick.ts | 53 ++++-------------------- src/mark.ts | 35 ++++++++++------ test/compile/mark/tick.test.ts | 13 +++--- 5 files changed, 83 insertions(+), 72 deletions(-) diff --git a/build/vega-lite-schema.json b/build/vega-lite-schema.json index 446bb1cd95..c99b9e876e 100644 --- a/build/vega-lite-schema.json +++ b/build/vega-lite-schema.json @@ -28308,6 +28308,11 @@ ], "description": "For text marks, the vertical text baseline. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, `\"line-bottom\"`, or an expression reference that provides one of the valid values. The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `lineHeight` rather than `fontSize` alone.\n\nFor range marks, the vertical alignment of the marks. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n\n__Note:__ Expression reference is *not* supported for range marks." }, + "binSpacing": { + "description": "Offset between bars for binned field. The ideal value for this is either 0 (preferred by statisticians) or 1 (Vega-Lite default, D3 example style).\n\n__Default value:__ `1`", + "minimum": 0, + "type": "number" + }, "blend": { "anyOf": [ { @@ -28333,6 +28338,11 @@ ], "description": "Default color.\n\n__Default value:__ `\"#4682b4\"`\n\n__Note:__\n- This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n- The `fill` and `stroke` properties have higher precedence than `color` and will override `color`." }, + "continuousBandSize": { + "description": "The default size of the bars on continuous scales.\n\n__Default value:__ `5`", + "minimum": 0, + "type": "number" + }, "cornerRadius": { "anyOf": [ { @@ -28421,6 +28431,18 @@ } ] }, + "discreteBandSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/RelativeBandSize" + } + ], + "description": "The default size of the bars with discrete dimensions. If unspecified, the default size is `step-2`, which provides 2 pixel offset between bars.", + "minimum": 0 + }, "dx": { "anyOf": [ { @@ -28633,6 +28655,17 @@ } ] }, + "minBandSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ExprRef" + } + ], + "description": "The minimum band size for bar and rectangle marks. __Default value:__ `0.25`" + }, "opacity": { "anyOf": [ { diff --git a/src/compile/mark/encode/position-rect.ts b/src/compile/mark/encode/position-rect.ts index 05bd00bdc2..9b2e131140 100644 --- a/src/compile/mark/encode/position-rect.ts +++ b/src/compile/mark/encode/position-rect.ts @@ -52,7 +52,9 @@ export function rectPosition(model: UnitModel, channel: 'x' | 'y' | 'theta' | 'r const offsetScaleChannel = getOffsetChannel(channel); - const isBarBand = mark === 'bar' && (channel === 'x' ? orient === 'vertical' : orient === 'horizontal'); + const isBarOrTickBand = + (mark === 'bar' && (channel === 'x' ? orient === 'vertical' : orient === 'horizontal')) || + (mark === 'tick' && (channel === 'y' ? orient === 'vertical' : orient === 'horizontal')); // x, x2, and width -- we must specify two of these in all conditions if ( @@ -68,7 +70,7 @@ export function rectPosition(model: UnitModel, channel: 'x' | 'y' | 'theta' | 'r channel, model }); - } else if (((isFieldOrDatumDef(channelDef) && hasDiscreteDomain(scaleType)) || isBarBand) && !channelDef2) { + } else if (((isFieldOrDatumDef(channelDef) && hasDiscreteDomain(scaleType)) || isBarOrTickBand) && !channelDef2) { return positionAndSize(channelDef, channel, model); } else { return rangePosition(channel, model, {defaultPos: 'zeroOrMax', defaultPos2: 'zeroOrMin'}); @@ -118,8 +120,11 @@ function defaultSizeRef( } } if (!hasFieldDef) { - const {bandPaddingInner, barBandPaddingInner, rectBandPaddingInner} = config.scale; - const padding = getFirstDefined(bandPaddingInner, mark === 'bar' ? barBandPaddingInner : rectBandPaddingInner); // this part is like paddingInner in scale.ts + const {bandPaddingInner, barBandPaddingInner, rectBandPaddingInner, tickBandPaddingInner} = config.scale; + const padding = getFirstDefined( + bandPaddingInner, + mark === 'tick' ? tickBandPaddingInner : mark === 'bar' ? barBandPaddingInner : rectBandPaddingInner + ); // this part is like paddingInner in scale.ts if (isSignalRef(padding)) { return {signal: `(1 - (${padding.signal})) * ${sizeChannel}`}; } else if (isNumber(padding)) { @@ -150,8 +155,12 @@ function positionAndSize( const offsetScaleName = model.scaleName(offsetScaleChannel); const offsetScale = model.getScaleComponent(getOffsetScaleChannel(channel)); - // use "size" channel for bars, if there is orient and the channel matches the right orientation - const useVlSizeChannel = (orient === 'horizontal' && channel === 'y') || (orient === 'vertical' && channel === 'x'); + const useVlSizeChannel = + // Always uses size channel for ticks, because tick only calls rectPosition() for the size channel + markDef.type === 'tick' || + // use "size" channel for bars, if there is orient and the channel matches the right orientation + (orient === 'horizontal' && channel === 'y') || + (orient === 'vertical' && channel === 'x'); // Use size encoding / mark property / config if it exists let sizeMixins; diff --git a/src/compile/mark/tick.ts b/src/compile/mark/tick.ts index cf0654f657..2a2bae8238 100644 --- a/src/compile/mark/tick.ts +++ b/src/compile/mark/tick.ts @@ -1,10 +1,7 @@ -import {isNumber} from 'vega-util'; -import {isVgRangeStep, VgValueRef} from '../../vega.schema'; -import {exprFromSignalRefOrValue, getMarkPropOrConfig, signalOrValueRef} from '../common'; +import {getMarkPropOrConfig, signalOrValueRef} from '../common'; import {UnitModel} from '../unit'; import {MarkCompiler} from './base'; import * as encode from './encode'; -import {getOffsetScaleChannel} from '../../channel'; export const tick: MarkCompiler = { vgMark: 'rect', @@ -13,7 +10,8 @@ export const tick: MarkCompiler = { const {config, markDef} = model; const orient = markDef.orient; - const vgSizeChannel = orient === 'horizontal' ? 'width' : 'height'; + const vgSizeAxisChannel = orient === 'horizontal' ? 'x' : 'y'; + const vgThicknessAxisChannel = orient === 'horizontal' ? 'y' : 'x'; const vgThicknessChannel = orient === 'horizontal' ? 'height' : 'width'; return { @@ -26,49 +24,12 @@ export const tick: MarkCompiler = { theta: 'ignore' }), - ...encode.pointPosition('x', model, {defaultPos: 'mid', vgChannel: 'xc'}), - ...encode.pointPosition('y', model, {defaultPos: 'mid', vgChannel: 'yc'}), - - // size / thickness => width / height - ...encode.nonPosition('size', model, { - defaultRef: defaultSize(model), - vgChannel: vgSizeChannel + ...encode.rectPosition(model, vgSizeAxisChannel), + ...encode.pointPosition(vgThicknessAxisChannel, model, { + defaultPos: 'mid', + vgChannel: vgThicknessAxisChannel === 'y' ? 'yc' : 'xc' }), [vgThicknessChannel]: signalOrValueRef(getMarkPropOrConfig('thickness', markDef, config)) }; } }; - -function defaultSize(model: UnitModel): VgValueRef { - const {config, markDef} = model; - const {orient} = markDef; - - const vgSizeChannel = orient === 'horizontal' ? 'width' : 'height'; - const positionChannel = orient === 'horizontal' ? 'x' : 'y'; - - const offsetScaleChannel = getOffsetScaleChannel(positionChannel); - - // Use offset scale if exists - const scale = model.getScaleComponent(offsetScaleChannel) || model.getScaleComponent(positionChannel); - - const markPropOrConfig = - getMarkPropOrConfig('size', markDef, config, {vgChannel: vgSizeChannel}) ?? config.tick.bandSize; - - if (markPropOrConfig !== undefined) { - return signalOrValueRef(markPropOrConfig); - } else if (scale?.get('type') === 'band') { - const scaleName = model.scaleName(offsetScaleChannel) || model.scaleName(positionChannel); - return {scale: scaleName, band: 1}; - } - - const scaleRange = scale?.get('range'); - const {tickBandPaddingInner} = config.scale; - - const step = scaleRange && isVgRangeStep(scaleRange) ? scaleRange.step : model[vgSizeChannel]; - - if (isNumber(step) && isNumber(tickBandPaddingInner)) { - return {value: step * (1 - tickBandPaddingInner)}; - } else { - return {signal: `(1 - ${exprFromSignalRefOrValue(tickBandPaddingInner)}) * ${exprFromSignalRefOrValue(step)}`}; - } -} diff --git a/src/mark.ts b/src/mark.ts index 46a4cc23e5..dff3d63b81 100644 --- a/src/mark.ts +++ b/src/mark.ts @@ -55,8 +55,8 @@ export function isPathMark(m: Mark | CompositeMark): m is PathMark { return ['line', 'area', 'trail'].includes(m); } -export function isRectBasedMark(m: Mark | CompositeMark): m is 'rect' | 'bar' | 'image' | 'arc' { - return ['rect', 'bar', 'image', 'arc' /* arc is rect/interval in polar coordinate */].includes(m); +export function isRectBasedMark(m: Mark | CompositeMark): m is 'rect' | 'bar' | 'image' | 'arc' | 'tick' { + return ['rect', 'bar', 'image', 'arc', 'tick' /* arc is rect/interval in polar coordinate */].includes(m); } export const PRIMITIVE_MARKS = new Set(keys(Mark)); @@ -327,14 +327,21 @@ const VL_ONLY_MARK_CONFIG_INDEX: Flag> = { export const VL_ONLY_MARK_CONFIG_PROPERTIES = keys(VL_ONLY_MARK_CONFIG_INDEX); +const VL_ONLY_RECT_CONFIG: (keyof RectConfig)[] = [ + 'binSpacing', + 'continuousBandSize', + 'discreteBandSize', + 'minBandSize' +]; + export const VL_ONLY_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX: { [k in Mark]?: (keyof Required>[k])[]; } = { area: ['line', 'point'], - bar: ['binSpacing', 'continuousBandSize', 'discreteBandSize', 'minBandSize'], - rect: ['binSpacing', 'continuousBandSize', 'discreteBandSize', 'minBandSize'], + bar: VL_ONLY_RECT_CONFIG, + rect: VL_ONLY_RECT_CONFIG, line: ['point'], - tick: ['bandSize', 'thickness'] + tick: ['bandSize', 'thickness', ...VL_ONLY_RECT_CONFIG] }; export const defaultMarkConfig: MarkConfig = { @@ -647,13 +654,6 @@ export interface MarkDef = { - binSpacing: 1, - continuousBandSize: DEFAULT_RECT_BAND_SIZE, - minBandSize: 0.25, - timeUnitBandPosition: 0.5 -}; - export const defaultRectConfig: RectConfig = { binSpacing: 0, continuousBandSize: DEFAULT_RECT_BAND_SIZE, @@ -661,7 +661,15 @@ export const defaultRectConfig: RectConfig = { timeUnitBandPosition: 0.5 }; -export interface TickConfig extends MarkConfig, TickThicknessMixins { +export const defaultBarConfig: RectConfig = { + ...defaultRectConfig, + binSpacing: 1 +}; + +export interface TickConfig + extends MarkConfig, + TickThicknessMixins, + RectConfig { /** * The width of the ticks. * @@ -672,6 +680,7 @@ export interface TickConfig extends MarkConfig = { + ...defaultRectConfig, thickness: 1 }; diff --git a/test/compile/mark/tick.test.ts b/test/compile/mark/tick.test.ts index bbc4e57761..7af4eefb33 100644 --- a/test/compile/mark/tick.test.ts +++ b/test/compile/mark/tick.test.ts @@ -111,7 +111,7 @@ describe('Mark: Tick', () => { }); it('should scale on y', () => { - expect(props.yc).toEqual({scale: Y, field: 'Cylinders', band: 0.5}); + expect(props.y).toEqual({scale: Y, field: 'Cylinders'}); }); it('width should be tick thickness with default orient vertical', () => { @@ -119,7 +119,7 @@ describe('Mark: Tick', () => { }); it('height should be matched to field with default orient vertical', () => { - expect(props.height).toEqual({scale: 'y', band: 1}); + expect(props.height).toEqual({signal: "max(0.25, bandwidth('y'))"}); }); }); describe('with quantitative x and ordinal y with yOffset', () => { @@ -139,11 +139,10 @@ describe('Mark: Tick', () => { }); it('should scale on y', () => { - expect(props.yc).toEqual({ + expect(props.y).toEqual({ scale: Y, field: 'Cylinders', offset: { - band: 0.5, field: 'Acceleration', scale: 'yOffset' } @@ -155,7 +154,7 @@ describe('Mark: Tick', () => { }); it('height should be matched to field with default orient vertical', () => { - expect(props.height).toEqual({scale: 'yOffset', band: 1}); + expect(props.height).toEqual({signal: "max(0.25, bandwidth('yOffset'))"}); }); }); @@ -217,7 +216,7 @@ describe('Mark: Tick', () => { }); const props = tick.encodeEntry(model); it('sets mark height to (1-tickBandPaddingInner) * plot_height', () => { - expect(props.height).toEqual({signal: '(1 - 0.25) * height'}); + expect(props.height).toEqual({signal: '0.75 * height'}); }); }); @@ -231,7 +230,7 @@ describe('Mark: Tick', () => { }); const props = tick.encodeEntry(model); it('sets mark width to (1-tickBandPaddingInner) * plot_width', () => { - expect(props.width).toEqual({signal: '(1 - 0.25) * width'}); + expect(props.width).toEqual({signal: '0.75 * width'}); }); }); }); From 4f6c7178daed70b2fc674552e87f0ec1a44bc1a8 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot Date: Wed, 28 Aug 2024 15:53:14 +0000 Subject: [PATCH 6/6] chore: update examples [CI] --- .../compiled/bar_bullet_expr_bind.vg.json | 2 +- .../compiled/bar_tooltip_aggregate.vg.json | 2 +- examples/compiled/bar_tooltip_groupby.vg.json | 2 +- .../compiled/boxplot_1D_horizontal.vg.json | 2 +- .../boxplot_1D_horizontal_custom_mark.vg.json | 10 ++++----- .../boxplot_1D_horizontal_explicit.vg.json | 2 +- examples/compiled/boxplot_1D_invalid.vg.json | 2 +- examples/compiled/boxplot_1D_vertical.vg.json | 2 +- .../compiled/boxplot_2D_horizontal.vg.json | 2 +- .../boxplot_2D_horizontal_color_size.vg.json | 2 +- examples/compiled/boxplot_2D_vertical.vg.json | 2 +- ...xplot_2D_vertical_single_per_group.vg.json | 2 +- ...2D_vertical_single_per_group_color.vg.json | 2 +- examples/compiled/boxplot_groupped.vg.json | 2 +- .../boxplot_minmax_2D_horizontal.vg.json | 2 +- ...2D_horizontal_custom_midtick_color.vg.json | 2 +- .../boxplot_minmax_2D_vertical.vg.json | 2 +- .../compiled/boxplot_preaggregated.vg.json | 2 +- .../boxplot_preaggregated_with_height.vg.json | 4 ++-- .../boxplot_tooltip_aggregate.vg.json | 2 +- .../boxplot_tooltip_not_aggregate.vg.json | 2 +- .../compiled/errorbar_2d_vertical_ticks.png | Bin 15334 -> 12995 bytes .../compiled/errorbar_2d_vertical_ticks.svg | 2 +- .../errorbar_2d_vertical_ticks.vg.json | 4 ++-- examples/compiled/errorbar_aggregate.vg.json | 4 ++-- .../errorbar_horizontal_aggregate.vg.json | 4 ++-- examples/compiled/facet_bullet.vg.json | 4 ++-- ...naggregate_mean_difference_by_year.vg.json | 4 ++-- .../layer_bar_tick_datum_grouped.vg.json | 6 +++--- .../compiled/layer_boxplot_circle.vg.json | 2 +- examples/compiled/layer_likert.vg.json | 4 ++-- ...orbar_2d_horizontal_color_encoding.vg.json | 8 +++---- ...rrorbar_2d_horizontal_custom_ticks.vg.json | 8 +++---- examples/compiled/parallel_coordinate.vg.json | 6 +++--- examples/compiled/tick_dot.vg.json | 4 ++-- examples/compiled/tick_dot_thickness.png | Bin 3816 -> 4525 bytes examples/compiled/tick_dot_thickness.svg | 2 +- examples/compiled/tick_dot_thickness.vg.json | 4 ++-- examples/compiled/tick_grouped.vg.json | 6 +++--- examples/compiled/tick_histogram.png | Bin 11332 -> 10926 bytes examples/compiled/tick_histogram.svg | 2 +- examples/compiled/tick_histogram.vg.json | 16 +++++++++++--- examples/compiled/tick_sort.vg.json | 4 ++-- examples/compiled/tick_strip.vg.json | 4 ++-- .../tick_strip_1D_with_height.vg.json | 4 ++-- .../compiled/tick_strip_tick_band.vg.json | 4 ++-- .../compiled/tick_strip_with_height.vg.json | 4 ++-- examples/compiled/tick_timeunit.png | Bin 12741 -> 12116 bytes examples/compiled/tick_timeunit.svg | 2 +- examples/compiled/tick_timeunit.vg.json | 20 ++++++++++++++---- examples/compiled/tick_width_band.png | Bin 5544 -> 5727 bytes examples/compiled/tick_width_band.svg | 2 +- examples/compiled/tick_width_band.vg.json | 4 ++-- 53 files changed, 106 insertions(+), 84 deletions(-) diff --git a/examples/compiled/bar_bullet_expr_bind.vg.json b/examples/compiled/bar_bullet_expr_bind.vg.json index c23e4af0f5..0259ad7d25 100644 --- a/examples/compiled/bar_bullet_expr_bind.vg.json +++ b/examples/compiled/bar_bullet_expr_bind.vg.json @@ -272,9 +272,9 @@ "description": { "signal": "\"markers[0]: \" + (format(datum[\"markers.0\"], \"\"))" }, - "xc": {"scale": "x", "field": "markers\\.0"}, "yc": {"signal": "height", "mult": 0.5}, "height": {"signal": "height"}, + "xc": {"scale": "x", "field": "markers\\.0"}, "width": {"value": 2} } } diff --git a/examples/compiled/bar_tooltip_aggregate.vg.json b/examples/compiled/bar_tooltip_aggregate.vg.json index 3abf49fbc0..297d873921 100644 --- a/examples/compiled/bar_tooltip_aggregate.vg.json +++ b/examples/compiled/bar_tooltip_aggregate.vg.json @@ -40,8 +40,8 @@ "signal": "\"Mean of data: \" + (format(datum[\"mean_data\"], \"\"))" }, "xc": {"signal": "width", "mult": 0.5}, + "width": {"signal": "0.75 * width"}, "yc": {"scale": "y", "field": "mean_data"}, - "width": {"signal": "(1 - 0.25) * width"}, "height": {"value": 1} } } diff --git a/examples/compiled/bar_tooltip_groupby.vg.json b/examples/compiled/bar_tooltip_groupby.vg.json index 70a15cebcb..df04a69780 100644 --- a/examples/compiled/bar_tooltip_groupby.vg.json +++ b/examples/compiled/bar_tooltip_groupby.vg.json @@ -42,8 +42,8 @@ "signal": "\"Mean of data: \" + (format(datum[\"mean_data\"], \"\")) + \"; data: \" + (isValid(datum[\"data\"]) ? datum[\"data\"] : \"\"+datum[\"data\"])" }, "xc": {"signal": "width", "mult": 0.5}, + "width": {"signal": "0.75 * width"}, "yc": {"scale": "y", "field": "mean_data"}, - "width": {"signal": "(1 - 0.25) * width"}, "height": {"value": 1} } } diff --git a/examples/compiled/boxplot_1D_horizontal.vg.json b/examples/compiled/boxplot_1D_horizontal.vg.json index 989dcbfbf3..717f0f259f 100644 --- a/examples/compiled/boxplot_1D_horizontal.vg.json +++ b/examples/compiled/boxplot_1D_horizontal.vg.json @@ -229,9 +229,9 @@ "tooltip": { "signal": "{\"Max of Body Mass (g)\": format(datum[\"max_Body Mass (g)\"], \"\"), \"Q3 of Body Mass (g)\": format(datum[\"upper_box_Body Mass (g)\"], \"\"), \"Median of Body Mass (g)\": format(datum[\"mid_box_Body Mass (g)\"], \"\"), \"Q1 of Body Mass (g)\": format(datum[\"lower_box_Body Mass (g)\"], \"\"), \"Min of Body Mass (g)\": format(datum[\"min_Body Mass (g)\"], \"\")}" }, - "xc": {"scale": "x", "field": "mid_box_Body Mass (g)"}, "yc": {"signal": "height", "mult": 0.5}, "height": {"value": 14}, + "xc": {"scale": "x", "field": "mid_box_Body Mass (g)"}, "width": {"value": 1} } } diff --git a/examples/compiled/boxplot_1D_horizontal_custom_mark.vg.json b/examples/compiled/boxplot_1D_horizontal_custom_mark.vg.json index 6822bb72b3..776537f73c 100644 --- a/examples/compiled/boxplot_1D_horizontal_custom_mark.vg.json +++ b/examples/compiled/boxplot_1D_horizontal_custom_mark.vg.json @@ -211,9 +211,9 @@ "tooltip": { "signal": "{\"Upper Whisker of Body Mass (g)\": format(datum[\"upper_whisker_Body Mass (g)\"], \"\"), \"Lower Whisker of Body Mass (g)\": format(datum[\"lower_whisker_Body Mass (g)\"], \"\")}" }, - "xc": {"scale": "x", "field": "lower_whisker_Body Mass (g)"}, "yc": {"signal": "height", "mult": 0.5}, - "height": {"signal": "(1 - 0.25) * height"}, + "height": {"signal": "0.75 * height"}, + "xc": {"scale": "x", "field": "lower_whisker_Body Mass (g)"}, "width": {"value": 1} } } @@ -231,9 +231,9 @@ "tooltip": { "signal": "{\"Upper Whisker of Body Mass (g)\": format(datum[\"upper_whisker_Body Mass (g)\"], \"\"), \"Lower Whisker of Body Mass (g)\": format(datum[\"lower_whisker_Body Mass (g)\"], \"\")}" }, - "xc": {"scale": "x", "field": "upper_whisker_Body Mass (g)"}, "yc": {"signal": "height", "mult": 0.5}, - "height": {"signal": "(1 - 0.25) * height"}, + "height": {"signal": "0.75 * height"}, + "xc": {"scale": "x", "field": "upper_whisker_Body Mass (g)"}, "width": {"value": 1} } } @@ -279,9 +279,9 @@ "tooltip": { "signal": "{\"Max of Body Mass (g)\": format(datum[\"max_Body Mass (g)\"], \"\"), \"Q3 of Body Mass (g)\": format(datum[\"upper_box_Body Mass (g)\"], \"\"), \"Median of Body Mass (g)\": format(datum[\"mid_box_Body Mass (g)\"], \"\"), \"Q1 of Body Mass (g)\": format(datum[\"lower_box_Body Mass (g)\"], \"\"), \"Min of Body Mass (g)\": format(datum[\"min_Body Mass (g)\"], \"\")}" }, - "xc": {"scale": "x", "field": "mid_box_Body Mass (g)"}, "yc": {"signal": "height", "mult": 0.5}, "height": {"value": 14}, + "xc": {"scale": "x", "field": "mid_box_Body Mass (g)"}, "width": {"value": 1} } } diff --git a/examples/compiled/boxplot_1D_horizontal_explicit.vg.json b/examples/compiled/boxplot_1D_horizontal_explicit.vg.json index 989dcbfbf3..717f0f259f 100644 --- a/examples/compiled/boxplot_1D_horizontal_explicit.vg.json +++ b/examples/compiled/boxplot_1D_horizontal_explicit.vg.json @@ -229,9 +229,9 @@ "tooltip": { "signal": "{\"Max of Body Mass (g)\": format(datum[\"max_Body Mass (g)\"], \"\"), \"Q3 of Body Mass (g)\": format(datum[\"upper_box_Body Mass (g)\"], \"\"), \"Median of Body Mass (g)\": format(datum[\"mid_box_Body Mass (g)\"], \"\"), \"Q1 of Body Mass (g)\": format(datum[\"lower_box_Body Mass (g)\"], \"\"), \"Min of Body Mass (g)\": format(datum[\"min_Body Mass (g)\"], \"\")}" }, - "xc": {"scale": "x", "field": "mid_box_Body Mass (g)"}, "yc": {"signal": "height", "mult": 0.5}, "height": {"value": 14}, + "xc": {"scale": "x", "field": "mid_box_Body Mass (g)"}, "width": {"value": 1} } } diff --git a/examples/compiled/boxplot_1D_invalid.vg.json b/examples/compiled/boxplot_1D_invalid.vg.json index cdaf4a8f35..ff84dca834 100644 --- a/examples/compiled/boxplot_1D_invalid.vg.json +++ b/examples/compiled/boxplot_1D_invalid.vg.json @@ -218,8 +218,8 @@ "signal": "{\"Max of b\": format(datum[\"max_b\"], \"\"), \"Q3 of b\": format(datum[\"upper_box_b\"], \"\"), \"Median of b\": format(datum[\"mid_box_b\"], \"\"), \"Q1 of b\": format(datum[\"lower_box_b\"], \"\"), \"Min of b\": format(datum[\"min_b\"], \"\"), \"a\": format(datum[\"a\"], \"\")}" }, "xc": {"scale": "x", "field": "a"}, - "yc": {"scale": "y", "field": "mid_box_b"}, "width": {"value": 14}, + "yc": {"scale": "y", "field": "mid_box_b"}, "height": {"value": 1} } } diff --git a/examples/compiled/boxplot_1D_vertical.vg.json b/examples/compiled/boxplot_1D_vertical.vg.json index 4e5ceedd6f..ae064d4290 100644 --- a/examples/compiled/boxplot_1D_vertical.vg.json +++ b/examples/compiled/boxplot_1D_vertical.vg.json @@ -230,8 +230,8 @@ "signal": "{\"Max of Body Mass (g)\": format(datum[\"max_Body Mass (g)\"], \"\"), \"Q3 of Body Mass (g)\": format(datum[\"upper_box_Body Mass (g)\"], \"\"), \"Median of Body Mass (g)\": format(datum[\"mid_box_Body Mass (g)\"], \"\"), \"Q1 of Body Mass (g)\": format(datum[\"lower_box_Body Mass (g)\"], \"\"), \"Min of Body Mass (g)\": format(datum[\"min_Body Mass (g)\"], \"\")}" }, "xc": {"signal": "width", "mult": 0.5}, - "yc": {"scale": "y", "field": "mid_box_Body Mass (g)"}, "width": {"value": 14}, + "yc": {"scale": "y", "field": "mid_box_Body Mass (g)"}, "height": {"value": 1} } } diff --git a/examples/compiled/boxplot_2D_horizontal.vg.json b/examples/compiled/boxplot_2D_horizontal.vg.json index 5ae134dabb..eddb366808 100644 --- a/examples/compiled/boxplot_2D_horizontal.vg.json +++ b/examples/compiled/boxplot_2D_horizontal.vg.json @@ -232,9 +232,9 @@ "tooltip": { "signal": "{\"Max of Body Mass (g)\": format(datum[\"max_Body Mass (g)\"], \"\"), \"Q3 of Body Mass (g)\": format(datum[\"upper_box_Body Mass (g)\"], \"\"), \"Median of Body Mass (g)\": format(datum[\"mid_box_Body Mass (g)\"], \"\"), \"Q1 of Body Mass (g)\": format(datum[\"lower_box_Body Mass (g)\"], \"\"), \"Min of Body Mass (g)\": format(datum[\"min_Body Mass (g)\"], \"\"), \"Species\": isValid(datum[\"Species\"]) ? datum[\"Species\"] : \"\"+datum[\"Species\"]}" }, - "xc": {"scale": "x", "field": "mid_box_Body Mass (g)"}, "yc": {"scale": "y", "field": "Species", "band": 0.5}, "height": {"value": 14}, + "xc": {"scale": "x", "field": "mid_box_Body Mass (g)"}, "width": {"value": 1} } } diff --git a/examples/compiled/boxplot_2D_horizontal_color_size.vg.json b/examples/compiled/boxplot_2D_horizontal_color_size.vg.json index 8bc85b5725..9b69f67750 100644 --- a/examples/compiled/boxplot_2D_horizontal_color_size.vg.json +++ b/examples/compiled/boxplot_2D_horizontal_color_size.vg.json @@ -232,9 +232,9 @@ "tooltip": { "signal": "{\"Max of Body Mass (g)\": format(datum[\"max_Body Mass (g)\"], \"\"), \"Q3 of Body Mass (g)\": format(datum[\"upper_box_Body Mass (g)\"], \"\"), \"Median of Body Mass (g)\": format(datum[\"mid_box_Body Mass (g)\"], \"\"), \"Q1 of Body Mass (g)\": format(datum[\"lower_box_Body Mass (g)\"], \"\"), \"Min of Body Mass (g)\": format(datum[\"min_Body Mass (g)\"], \"\"), \"Species\": isValid(datum[\"Species\"]) ? datum[\"Species\"] : \"\"+datum[\"Species\"]}" }, - "xc": {"scale": "x", "field": "mid_box_Body Mass (g)"}, "yc": {"scale": "y", "field": "Species", "band": 0.5}, "height": {"value": 10}, + "xc": {"scale": "x", "field": "mid_box_Body Mass (g)"}, "width": {"value": 1} } } diff --git a/examples/compiled/boxplot_2D_vertical.vg.json b/examples/compiled/boxplot_2D_vertical.vg.json index 7dbbd0d072..c3e870d09d 100644 --- a/examples/compiled/boxplot_2D_vertical.vg.json +++ b/examples/compiled/boxplot_2D_vertical.vg.json @@ -234,8 +234,8 @@ "signal": "{\"Max of Body Mass (g)\": format(datum[\"max_Body Mass (g)\"], \"\"), \"Q3 of Body Mass (g)\": format(datum[\"upper_box_Body Mass (g)\"], \"\"), \"Median of Body Mass (g)\": format(datum[\"mid_box_Body Mass (g)\"], \"\"), \"Q1 of Body Mass (g)\": format(datum[\"lower_box_Body Mass (g)\"], \"\"), \"Min of Body Mass (g)\": format(datum[\"min_Body Mass (g)\"], \"\"), \"Species\": isValid(datum[\"Species\"]) ? datum[\"Species\"] : \"\"+datum[\"Species\"]}" }, "xc": {"scale": "x", "field": "Species", "band": 0.5}, - "yc": {"scale": "y", "field": "mid_box_Body Mass (g)"}, "width": {"value": 14}, + "yc": {"scale": "y", "field": "mid_box_Body Mass (g)"}, "height": {"value": 1} } } diff --git a/examples/compiled/boxplot_2D_vertical_single_per_group.vg.json b/examples/compiled/boxplot_2D_vertical_single_per_group.vg.json index 0ea2889ea3..aaf6d6723e 100644 --- a/examples/compiled/boxplot_2D_vertical_single_per_group.vg.json +++ b/examples/compiled/boxplot_2D_vertical_single_per_group.vg.json @@ -215,8 +215,8 @@ "signal": "{\"Max of b\": format(datum[\"max_b\"], \"\"), \"Q3 of b\": format(datum[\"upper_box_b\"], \"\"), \"Median of b\": format(datum[\"mid_box_b\"], \"\"), \"Q1 of b\": format(datum[\"lower_box_b\"], \"\"), \"Min of b\": format(datum[\"min_b\"], \"\"), \"a\": isValid(datum[\"a\"]) ? datum[\"a\"] : \"\"+datum[\"a\"]}" }, "xc": {"scale": "x", "field": "a", "band": 0.5}, - "yc": {"scale": "y", "field": "mid_box_b"}, "width": {"value": 14}, + "yc": {"scale": "y", "field": "mid_box_b"}, "height": {"value": 1} } } diff --git a/examples/compiled/boxplot_2D_vertical_single_per_group_color.vg.json b/examples/compiled/boxplot_2D_vertical_single_per_group_color.vg.json index d1313bdca4..3d46d99a2e 100644 --- a/examples/compiled/boxplot_2D_vertical_single_per_group_color.vg.json +++ b/examples/compiled/boxplot_2D_vertical_single_per_group_color.vg.json @@ -216,8 +216,8 @@ "signal": "{\"Max of b\": format(datum[\"max_b\"], \"\"), \"Q3 of b\": format(datum[\"upper_box_b\"], \"\"), \"Median of b\": format(datum[\"mid_box_b\"], \"\"), \"Q1 of b\": format(datum[\"lower_box_b\"], \"\"), \"Min of b\": format(datum[\"min_b\"], \"\"), \"a\": isValid(datum[\"a\"]) ? datum[\"a\"] : \"\"+datum[\"a\"]}" }, "xc": {"scale": "x", "field": "a", "band": 0.5}, - "yc": {"scale": "y", "field": "mid_box_b"}, "width": {"value": 14}, + "yc": {"scale": "y", "field": "mid_box_b"}, "height": {"value": 1} } } diff --git a/examples/compiled/boxplot_groupped.vg.json b/examples/compiled/boxplot_groupped.vg.json index 2b0b85159b..258c7b6518 100644 --- a/examples/compiled/boxplot_groupped.vg.json +++ b/examples/compiled/boxplot_groupped.vg.json @@ -256,8 +256,8 @@ "field": "Cylinders", "offset": {"scale": "xOffset", "field": "Origin", "band": 0.5} }, - "yc": {"scale": "y", "field": "mid_box_Acceleration"}, "width": {"value": 14}, + "yc": {"scale": "y", "field": "mid_box_Acceleration"}, "height": {"value": 1} } } diff --git a/examples/compiled/boxplot_minmax_2D_horizontal.vg.json b/examples/compiled/boxplot_minmax_2D_horizontal.vg.json index 1cfb790cf9..f156ed7608 100644 --- a/examples/compiled/boxplot_minmax_2D_horizontal.vg.json +++ b/examples/compiled/boxplot_minmax_2D_horizontal.vg.json @@ -155,9 +155,9 @@ "tooltip": { "signal": "{\"Max of Body Mass (g)\": format(datum[\"upper_whisker_Body Mass (g)\"], \"\"), \"Q3 of Body Mass (g)\": format(datum[\"upper_box_Body Mass (g)\"], \"\"), \"Median of Body Mass (g)\": format(datum[\"mid_box_Body Mass (g)\"], \"\"), \"Q1 of Body Mass (g)\": format(datum[\"lower_box_Body Mass (g)\"], \"\"), \"Min of Body Mass (g)\": format(datum[\"lower_whisker_Body Mass (g)\"], \"\"), \"Species\": isValid(datum[\"Species\"]) ? datum[\"Species\"] : \"\"+datum[\"Species\"]}" }, - "xc": {"scale": "x", "field": "mid_box_Body Mass (g)"}, "yc": {"scale": "y", "field": "Species", "band": 0.5}, "height": {"value": 14}, + "xc": {"scale": "x", "field": "mid_box_Body Mass (g)"}, "width": {"value": 1} } } diff --git a/examples/compiled/boxplot_minmax_2D_horizontal_custom_midtick_color.vg.json b/examples/compiled/boxplot_minmax_2D_horizontal_custom_midtick_color.vg.json index 3be74d5c6a..750d604ccc 100644 --- a/examples/compiled/boxplot_minmax_2D_horizontal_custom_midtick_color.vg.json +++ b/examples/compiled/boxplot_minmax_2D_horizontal_custom_midtick_color.vg.json @@ -155,9 +155,9 @@ "tooltip": { "signal": "{\"Max of Body Mass (g)\": format(datum[\"upper_whisker_Body Mass (g)\"], \"\"), \"Q3 of Body Mass (g)\": format(datum[\"upper_box_Body Mass (g)\"], \"\"), \"Median of Body Mass (g)\": format(datum[\"mid_box_Body Mass (g)\"], \"\"), \"Q1 of Body Mass (g)\": format(datum[\"lower_box_Body Mass (g)\"], \"\"), \"Min of Body Mass (g)\": format(datum[\"lower_whisker_Body Mass (g)\"], \"\"), \"Species\": isValid(datum[\"Species\"]) ? datum[\"Species\"] : \"\"+datum[\"Species\"]}" }, - "xc": {"scale": "x", "field": "mid_box_Body Mass (g)"}, "yc": {"scale": "y", "field": "Species", "band": 0.5}, "height": {"value": 14}, + "xc": {"scale": "x", "field": "mid_box_Body Mass (g)"}, "width": {"value": 1} } } diff --git a/examples/compiled/boxplot_minmax_2D_vertical.vg.json b/examples/compiled/boxplot_minmax_2D_vertical.vg.json index f8f5dfbde6..d430580c34 100644 --- a/examples/compiled/boxplot_minmax_2D_vertical.vg.json +++ b/examples/compiled/boxplot_minmax_2D_vertical.vg.json @@ -157,8 +157,8 @@ "signal": "{\"Max of Body Mass (g)\": format(datum[\"upper_whisker_Body Mass (g)\"], \"\"), \"Q3 of Body Mass (g)\": format(datum[\"upper_box_Body Mass (g)\"], \"\"), \"Median of Body Mass (g)\": format(datum[\"mid_box_Body Mass (g)\"], \"\"), \"Q1 of Body Mass (g)\": format(datum[\"lower_box_Body Mass (g)\"], \"\"), \"Min of Body Mass (g)\": format(datum[\"lower_whisker_Body Mass (g)\"], \"\"), \"Species\": isValid(datum[\"Species\"]) ? datum[\"Species\"] : \"\"+datum[\"Species\"]}" }, "xc": {"scale": "x", "field": "Species", "band": 0.5}, - "yc": {"scale": "y", "field": "mid_box_Body Mass (g)"}, "width": {"value": 14}, + "yc": {"scale": "y", "field": "mid_box_Body Mass (g)"}, "height": {"value": 1} } } diff --git a/examples/compiled/boxplot_preaggregated.vg.json b/examples/compiled/boxplot_preaggregated.vg.json index 90a007ded0..44d130665e 100644 --- a/examples/compiled/boxplot_preaggregated.vg.json +++ b/examples/compiled/boxplot_preaggregated.vg.json @@ -134,9 +134,9 @@ "description": { "signal": "\"median: \" + (format(datum[\"median\"], \"\")) + \"; Species: \" + (isValid(datum[\"Species\"]) ? datum[\"Species\"] : \"\"+datum[\"Species\"])" }, - "xc": {"scale": "x", "field": "median"}, "yc": {"scale": "y", "field": "Species", "band": 0.5}, "height": {"value": 14}, + "xc": {"scale": "x", "field": "median"}, "width": {"value": 1} } } diff --git a/examples/compiled/boxplot_preaggregated_with_height.vg.json b/examples/compiled/boxplot_preaggregated_with_height.vg.json index efeea34c41..0a0839e155 100644 --- a/examples/compiled/boxplot_preaggregated_with_height.vg.json +++ b/examples/compiled/boxplot_preaggregated_with_height.vg.json @@ -131,9 +131,9 @@ "description": { "signal": "\"median: \" + (format(datum[\"median\"], \"\")) + \"; Species: \" + (isValid(datum[\"Species\"]) ? datum[\"Species\"] : \"\"+datum[\"Species\"])" }, + "y": {"scale": "y", "field": "Species"}, + "height": {"signal": "max(0.25, bandwidth('y'))"}, "xc": {"scale": "x", "field": "median"}, - "yc": {"scale": "y", "field": "Species", "band": 0.5}, - "height": {"scale": "y", "band": 1}, "width": {"value": 1} } } diff --git a/examples/compiled/boxplot_tooltip_aggregate.vg.json b/examples/compiled/boxplot_tooltip_aggregate.vg.json index f2597fbe5b..21dbd804b4 100644 --- a/examples/compiled/boxplot_tooltip_aggregate.vg.json +++ b/examples/compiled/boxplot_tooltip_aggregate.vg.json @@ -228,9 +228,9 @@ {"value": "white"} ], "tooltip": {"signal": "format(datum[\"mean_Body Mass (g)\"], \"\")"}, - "xc": {"scale": "x", "field": "mid_box_Body Mass (g)"}, "yc": {"scale": "y", "field": "Species", "band": 0.5}, "height": {"value": 14}, + "xc": {"scale": "x", "field": "mid_box_Body Mass (g)"}, "width": {"value": 1} } } diff --git a/examples/compiled/boxplot_tooltip_not_aggregate.vg.json b/examples/compiled/boxplot_tooltip_not_aggregate.vg.json index f845845978..8c5512a3ba 100644 --- a/examples/compiled/boxplot_tooltip_not_aggregate.vg.json +++ b/examples/compiled/boxplot_tooltip_not_aggregate.vg.json @@ -233,9 +233,9 @@ "tooltip": { "signal": "{\"Max of Body Mass (g)\": format(datum[\"max_Body Mass (g)\"], \"\"), \"Q3 of Body Mass (g)\": format(datum[\"upper_box_Body Mass (g)\"], \"\"), \"Median of Body Mass (g)\": format(datum[\"mid_box_Body Mass (g)\"], \"\"), \"Q1 of Body Mass (g)\": format(datum[\"lower_box_Body Mass (g)\"], \"\"), \"Min of Body Mass (g)\": format(datum[\"min_Body Mass (g)\"], \"\"), \"Species\": isValid(datum[\"Species\"]) ? datum[\"Species\"] : \"\"+datum[\"Species\"]}" }, - "xc": {"scale": "x", "field": "mid_box_Body Mass (g)"}, "yc": {"scale": "y", "field": "Species", "band": 0.5}, "height": {"value": 14}, + "xc": {"scale": "x", "field": "mid_box_Body Mass (g)"}, "width": {"value": 1} } } diff --git a/examples/compiled/errorbar_2d_vertical_ticks.png b/examples/compiled/errorbar_2d_vertical_ticks.png index 78ad1fcbeba876d534d8c7125c00ef794cd99727..447e5ae4685d61d85ead1678d4027cd8b53d7893 100644 GIT binary patch literal 12995 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 literal 15334 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 \ No newline at end of file +197019721974197619781980Year (year)1520253035Miles per Gallon (95% CIs) \ No newline at end of file diff --git a/examples/compiled/errorbar_2d_vertical_ticks.vg.json b/examples/compiled/errorbar_2d_vertical_ticks.vg.json index eb3bcf8ccd..2393cdd06d 100644 --- a/examples/compiled/errorbar_2d_vertical_ticks.vg.json +++ b/examples/compiled/errorbar_2d_vertical_ticks.vg.json @@ -70,8 +70,8 @@ "signal": "{\"Ci1 of Miles_per_Gallon\": format(datum[\"upper_Miles_per_Gallon\"], \"\"), \"Ci0 of Miles_per_Gallon\": format(datum[\"lower_Miles_per_Gallon\"], \"\"), \"Mean of Miles_per_Gallon\": format(datum[\"center_Miles_per_Gallon\"], \"\"), \"Year (year)\": timeFormat(datum[\"year_Year\"], '%b %d, %Y')}" }, "xc": {"scale": "x", "field": "year_Year"}, + "width": {"value": 5}, "yc": {"scale": "y", "field": "lower_Miles_per_Gallon"}, - "width": {"signal": "(1 - 0.25) * width"}, "height": {"value": 1} } } @@ -90,8 +90,8 @@ "signal": "{\"Ci1 of Miles_per_Gallon\": format(datum[\"upper_Miles_per_Gallon\"], \"\"), \"Ci0 of Miles_per_Gallon\": format(datum[\"lower_Miles_per_Gallon\"], \"\"), \"Mean of Miles_per_Gallon\": format(datum[\"center_Miles_per_Gallon\"], \"\"), \"Year (year)\": timeFormat(datum[\"year_Year\"], '%b %d, %Y')}" }, "xc": {"scale": "x", "field": "year_Year"}, + "width": {"value": 5}, "yc": {"scale": "y", "field": "upper_Miles_per_Gallon"}, - "width": {"signal": "(1 - 0.25) * width"}, "height": {"value": 1} } } diff --git a/examples/compiled/errorbar_aggregate.vg.json b/examples/compiled/errorbar_aggregate.vg.json index 70df548211..ccae78530c 100644 --- a/examples/compiled/errorbar_aggregate.vg.json +++ b/examples/compiled/errorbar_aggregate.vg.json @@ -87,8 +87,8 @@ "signal": "\"age: \" + (isValid(datum[\"age\"]) ? datum[\"age\"] : \"\"+datum[\"age\"]) + \"; population: \" + (format(datum[\"min_people\"], \"\"))" }, "xc": {"scale": "x", "field": "age", "band": 0.5}, - "yc": {"scale": "y", "field": "min_people"}, "width": {"value": 5}, + "yc": {"scale": "y", "field": "min_people"}, "height": {"value": 1} } } @@ -106,8 +106,8 @@ "signal": "\"age: \" + (isValid(datum[\"age\"]) ? datum[\"age\"] : \"\"+datum[\"age\"]) + \"; population: \" + (format(datum[\"max_people\"], \"\"))" }, "xc": {"scale": "x", "field": "age", "band": 0.5}, - "yc": {"scale": "y", "field": "max_people"}, "width": {"value": 5}, + "yc": {"scale": "y", "field": "max_people"}, "height": {"value": 1} } } diff --git a/examples/compiled/errorbar_horizontal_aggregate.vg.json b/examples/compiled/errorbar_horizontal_aggregate.vg.json index e1c5a726d4..435e28acd1 100644 --- a/examples/compiled/errorbar_horizontal_aggregate.vg.json +++ b/examples/compiled/errorbar_horizontal_aggregate.vg.json @@ -86,9 +86,9 @@ "description": { "signal": "\"population: \" + (format(datum[\"min_people\"], \"\")) + \"; age: \" + (isValid(datum[\"age\"]) ? datum[\"age\"] : \"\"+datum[\"age\"])" }, - "xc": {"scale": "x", "field": "min_people"}, "yc": {"scale": "y", "field": "age", "band": 0.5}, "height": {"value": 5}, + "xc": {"scale": "x", "field": "min_people"}, "width": {"value": 1} } } @@ -105,9 +105,9 @@ "description": { "signal": "\"population: \" + (format(datum[\"max_people\"], \"\")) + \"; age: \" + (isValid(datum[\"age\"]) ? datum[\"age\"] : \"\"+datum[\"age\"])" }, - "xc": {"scale": "x", "field": "max_people"}, "yc": {"scale": "y", "field": "age", "band": 0.5}, "height": {"value": 5}, + "xc": {"scale": "x", "field": "max_people"}, "width": {"value": 1} } } diff --git a/examples/compiled/facet_bullet.vg.json b/examples/compiled/facet_bullet.vg.json index 353bcc5a24..65588214e4 100644 --- a/examples/compiled/facet_bullet.vg.json +++ b/examples/compiled/facet_bullet.vg.json @@ -437,9 +437,9 @@ "description": { "signal": "\"markers[0]: \" + (format(datum[\"markers.0\"], \"\"))" }, - "xc": {"scale": "child_x", "field": "markers\\.0"}, "yc": {"signal": "child_height", "mult": 0.5}, - "height": {"signal": "(1 - 0.25) * child_height"}, + "height": {"signal": "0.75 * height"}, + "xc": {"scale": "child_x", "field": "markers\\.0"}, "width": {"value": 2} } } diff --git a/examples/compiled/joinaggregate_mean_difference_by_year.vg.json b/examples/compiled/joinaggregate_mean_difference_by_year.vg.json index f43bf72226..58e59fc211 100644 --- a/examples/compiled/joinaggregate_mean_difference_by_year.vg.json +++ b/examples/compiled/joinaggregate_mean_difference_by_year.vg.json @@ -101,9 +101,9 @@ "description": { "signal": "\"AverageYearRating: \" + (format(datum[\"AverageYearRating\"], \"\")) + \"; Title: \" + (isValid(datum[\"Title\"]) ? datum[\"Title\"] : \"\"+datum[\"Title\"])" }, + "y": {"scale": "y", "field": "Title"}, + "height": {"signal": "max(0.25, bandwidth('y'))"}, "xc": {"scale": "x", "field": "AverageYearRating"}, - "yc": {"scale": "y", "field": "Title", "band": 0.5}, - "height": {"scale": "y", "band": 1}, "width": {"value": 1} } } diff --git a/examples/compiled/layer_bar_tick_datum_grouped.vg.json b/examples/compiled/layer_bar_tick_datum_grouped.vg.json index ec3051af03..1c3aa693d4 100644 --- a/examples/compiled/layer_bar_tick_datum_grouped.vg.json +++ b/examples/compiled/layer_bar_tick_datum_grouped.vg.json @@ -72,13 +72,13 @@ "description": { "signal": "\"Cylinders: \" + (isValid(datum[\"Cylinders\"]) ? datum[\"Cylinders\"] : \"\"+datum[\"Cylinders\"]) + \"; Origin: \" + (isValid(datum[\"Origin\"]) ? datum[\"Origin\"] : \"\"+datum[\"Origin\"])" }, - "xc": { + "x": { "scale": "x", "field": "Cylinders", - "offset": {"scale": "xOffset", "field": "Origin", "band": 0.5} + "offset": {"scale": "xOffset", "field": "Origin"} }, + "width": {"signal": "max(0.25, bandwidth('xOffset'))"}, "yc": {"scale": "y", "value": 10}, - "width": {"scale": "xOffset", "band": 1}, "height": {"value": 1} } } diff --git a/examples/compiled/layer_boxplot_circle.vg.json b/examples/compiled/layer_boxplot_circle.vg.json index 3186d3f671..96d93c3eb2 100644 --- a/examples/compiled/layer_boxplot_circle.vg.json +++ b/examples/compiled/layer_boxplot_circle.vg.json @@ -197,9 +197,9 @@ "tooltip": { "signal": "{\"Max of population\": format(datum[\"max_people\"], \"\"), \"Q3 of population\": format(datum[\"upper_box_people\"], \"\"), \"Median of population\": format(datum[\"mid_box_people\"], \"\"), \"Q1 of population\": format(datum[\"lower_box_people\"], \"\"), \"Min of population\": format(datum[\"min_people\"], \"\"), \"age\": isValid(datum[\"age\"]) ? datum[\"age\"] : \"\"+datum[\"age\"]}" }, - "xc": {"scale": "x", "field": "mid_box_people"}, "yc": {"scale": "y", "field": "age", "band": 0.5}, "height": {"value": 14}, + "xc": {"scale": "x", "field": "mid_box_people"}, "width": {"value": 1} } } diff --git a/examples/compiled/layer_likert.vg.json b/examples/compiled/layer_likert.vg.json index b7e6cbdd80..37e697f5e8 100644 --- a/examples/compiled/layer_likert.vg.json +++ b/examples/compiled/layer_likert.vg.json @@ -290,9 +290,9 @@ "description": { "signal": "\"median: \" + (format(datum[\"median\"], \"\")) + \"; name: \" + (isValid(datum[\"name\"]) ? datum[\"name\"] : \"\"+datum[\"name\"])" }, + "y": {"scale": "y", "field": "name"}, + "height": {"signal": "max(0.25, bandwidth('y'))"}, "xc": {"scale": "x", "field": "median"}, - "yc": {"scale": "y", "field": "name", "band": 0.5}, - "height": {"scale": "y", "band": 1}, "width": {"value": 1} } } diff --git a/examples/compiled/layer_point_errorbar_2d_horizontal_color_encoding.vg.json b/examples/compiled/layer_point_errorbar_2d_horizontal_color_encoding.vg.json index 812201fc09..443e0c3f29 100644 --- a/examples/compiled/layer_point_errorbar_2d_horizontal_color_encoding.vg.json +++ b/examples/compiled/layer_point_errorbar_2d_horizontal_color_encoding.vg.json @@ -87,9 +87,9 @@ "tooltip": { "signal": "{\"Mean of yield\": format(datum[\"center_yield\"], \"\"), \"Mean + stderr of yield\": format(datum[\"upper_yield\"], \"\"), \"Mean - stderr of yield\": format(datum[\"lower_yield\"], \"\"), \"variety\": isValid(datum[\"variety\"]) ? datum[\"variety\"] : \"\"+datum[\"variety\"]}" }, + "y": {"scale": "y", "field": "variety"}, + "height": {"signal": "max(0.25, bandwidth('y'))"}, "xc": {"scale": "x", "field": "lower_yield"}, - "yc": {"scale": "y", "field": "variety", "band": 0.5}, - "height": {"scale": "y", "band": 1}, "width": {"value": 1} } } @@ -107,9 +107,9 @@ "tooltip": { "signal": "{\"Mean of yield\": format(datum[\"center_yield\"], \"\"), \"Mean + stderr of yield\": format(datum[\"upper_yield\"], \"\"), \"Mean - stderr of yield\": format(datum[\"lower_yield\"], \"\"), \"variety\": isValid(datum[\"variety\"]) ? datum[\"variety\"] : \"\"+datum[\"variety\"]}" }, + "y": {"scale": "y", "field": "variety"}, + "height": {"signal": "max(0.25, bandwidth('y'))"}, "xc": {"scale": "x", "field": "upper_yield"}, - "yc": {"scale": "y", "field": "variety", "band": 0.5}, - "height": {"scale": "y", "band": 1}, "width": {"value": 1} } } diff --git a/examples/compiled/layer_point_errorbar_2d_horizontal_custom_ticks.vg.json b/examples/compiled/layer_point_errorbar_2d_horizontal_custom_ticks.vg.json index a81a866b7b..77a39ccee1 100644 --- a/examples/compiled/layer_point_errorbar_2d_horizontal_custom_ticks.vg.json +++ b/examples/compiled/layer_point_errorbar_2d_horizontal_custom_ticks.vg.json @@ -87,9 +87,9 @@ "tooltip": { "signal": "{\"Mean of yield\": format(datum[\"center_yield\"], \"\"), \"Mean + stderr of yield\": format(datum[\"upper_yield\"], \"\"), \"Mean - stderr of yield\": format(datum[\"lower_yield\"], \"\"), \"variety\": isValid(datum[\"variety\"]) ? datum[\"variety\"] : \"\"+datum[\"variety\"]}" }, + "y": {"scale": "y", "field": "variety"}, + "height": {"signal": "max(0.25, bandwidth('y'))"}, "xc": {"scale": "x", "field": "lower_yield"}, - "yc": {"scale": "y", "field": "variety", "band": 0.5}, - "height": {"scale": "y", "band": 1}, "width": {"value": 1} } } @@ -107,9 +107,9 @@ "tooltip": { "signal": "{\"Mean of yield\": format(datum[\"center_yield\"], \"\"), \"Mean + stderr of yield\": format(datum[\"upper_yield\"], \"\"), \"Mean - stderr of yield\": format(datum[\"lower_yield\"], \"\"), \"variety\": isValid(datum[\"variety\"]) ? datum[\"variety\"] : \"\"+datum[\"variety\"]}" }, + "y": {"scale": "y", "field": "variety"}, + "height": {"signal": "max(0.25, bandwidth('y'))"}, "xc": {"scale": "x", "field": "upper_yield"}, - "yc": {"scale": "y", "field": "variety", "band": 0.5}, - "height": {"scale": "y", "band": 1}, "width": {"value": 1} } } diff --git a/examples/compiled/parallel_coordinate.vg.json b/examples/compiled/parallel_coordinate.vg.json index 35d0cb7a13..eecad0aedc 100644 --- a/examples/compiled/parallel_coordinate.vg.json +++ b/examples/compiled/parallel_coordinate.vg.json @@ -152,8 +152,8 @@ "signal": "\"key: \" + (isValid(datum[\"key\"]) ? datum[\"key\"] : \"\"+datum[\"key\"])" }, "xc": {"scale": "x", "field": "key", "band": 0.5}, - "yc": {"value": 0}, "width": {"value": 8}, + "yc": {"value": 0}, "height": {"value": 1} } } @@ -189,8 +189,8 @@ "signal": "\"key: \" + (isValid(datum[\"key\"]) ? datum[\"key\"] : \"\"+datum[\"key\"])" }, "xc": {"scale": "x", "field": "key", "band": 0.5}, - "yc": {"value": 150}, "width": {"value": 8}, + "yc": {"value": 150}, "height": {"value": 1} } } @@ -226,8 +226,8 @@ "signal": "\"key: \" + (isValid(datum[\"key\"]) ? datum[\"key\"] : \"\"+datum[\"key\"])" }, "xc": {"scale": "x", "field": "key", "band": 0.5}, - "yc": {"value": 300}, "width": {"value": 8}, + "yc": {"value": 300}, "height": {"value": 1} } } diff --git a/examples/compiled/tick_dot.vg.json b/examples/compiled/tick_dot.vg.json index 1ee300c2df..74f5b585e5 100644 --- a/examples/compiled/tick_dot.vg.json +++ b/examples/compiled/tick_dot.vg.json @@ -32,9 +32,9 @@ "description": { "signal": "\"precipitation: \" + (format(datum[\"precipitation\"], \"\"))" }, - "xc": {"scale": "x", "field": "precipitation"}, "yc": {"signal": "height", "mult": 0.5}, - "height": {"signal": "(1 - 0.25) * height"}, + "height": {"signal": "0.75 * height"}, + "xc": {"scale": "x", "field": "precipitation"}, "width": {"value": 1} } } diff --git a/examples/compiled/tick_dot_thickness.png b/examples/compiled/tick_dot_thickness.png index ee3030636e9ad30006096fbe8736357f2d9fc401..bcf665cfb10474aa60e7898ba5a510ff61729105 100644 GIT binary patch literal 4525 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 diff --git a/examples/compiled/tick_dot_thickness.svg b/examples/compiled/tick_dot_thickness.svg index 676fc14a39..50ad2b9ddb 100644 --- a/examples/compiled/tick_dot_thickness.svg +++ b/examples/compiled/tick_dot_thickness.svg @@ -1 +1 @@ -050100150200Horsepower \ No newline at end of file +050100150200Horsepower \ No newline at end of file diff --git a/examples/compiled/tick_dot_thickness.vg.json b/examples/compiled/tick_dot_thickness.vg.json index 962912839c..9c6fe9d8f7 100644 --- a/examples/compiled/tick_dot_thickness.vg.json +++ b/examples/compiled/tick_dot_thickness.vg.json @@ -32,9 +32,9 @@ "description": { "signal": "\"Horsepower: \" + (format(datum[\"Horsepower\"], \"\"))" }, - "xc": {"scale": "x", "field": "Horsepower"}, "yc": {"signal": "height", "mult": 0.5}, - "height": {"value": 10}, + "height": {"signal": "0.75 * height"}, + "xc": {"scale": "x", "field": "Horsepower"}, "width": {"value": 2} } } diff --git a/examples/compiled/tick_grouped.vg.json b/examples/compiled/tick_grouped.vg.json index 883742b42b..28a1a3ec34 100644 --- a/examples/compiled/tick_grouped.vg.json +++ b/examples/compiled/tick_grouped.vg.json @@ -54,13 +54,13 @@ "description": { "signal": "\"category: \" + (isValid(datum[\"category\"]) ? datum[\"category\"] : \"\"+datum[\"category\"]) + \"; value: \" + (format(datum[\"value\"], \"\")) + \"; group: \" + (isValid(datum[\"group\"]) ? datum[\"group\"] : \"\"+datum[\"group\"])" }, - "xc": { + "x": { "scale": "x", "field": "category", - "offset": {"scale": "xOffset", "field": "group", "band": 0.5} + "offset": {"scale": "xOffset", "field": "group"} }, + "width": {"signal": "max(0.25, bandwidth('xOffset'))"}, "yc": {"scale": "y", "field": "value"}, - "width": {"scale": "xOffset", "band": 1}, "height": {"value": 1} } } diff --git a/examples/compiled/tick_histogram.png b/examples/compiled/tick_histogram.png index caeb22c8306de36aedfcbaede4af31a954c81363..5499896975df1e162fc34cd41811a0adaaa01e1b 100644 GIT binary patch literal 10926 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 \ No newline at end of file +1.02.03.04.05.06.07.08.09.010.0IMDB Rating (binned)02004006008001,000Count of Records \ No newline at end of file diff --git a/examples/compiled/tick_histogram.vg.json b/examples/compiled/tick_histogram.vg.json index bc19724860..5445b26d48 100644 --- a/examples/compiled/tick_histogram.vg.json +++ b/examples/compiled/tick_histogram.vg.json @@ -57,11 +57,21 @@ "description": { "signal": "\"IMDB Rating (binned): \" + (!isValid(datum[\"bin_maxbins_10_IMDB Rating\"]) || !isFinite(+datum[\"bin_maxbins_10_IMDB Rating\"]) ? \"null\" : format(datum[\"bin_maxbins_10_IMDB Rating\"], \"\") + \" – \" + format(datum[\"bin_maxbins_10_IMDB Rating_end\"], \"\")) + \"; Count of Records: \" + (format(datum[\"__count\"], \"\"))" }, - "xc": { - "signal": "scale(\"x\", 0.5 * datum[\"bin_maxbins_10_IMDB Rating\"] + 0.5 * datum[\"bin_maxbins_10_IMDB Rating_end\"])" + "x2": { + "scale": "x", + "field": "bin_maxbins_10_IMDB Rating", + "offset": { + "signal": "0.5 + (abs(scale(\"x\", datum[\"bin_maxbins_10_IMDB Rating_end\"]) - scale(\"x\", datum[\"bin_maxbins_10_IMDB Rating\"])) < 0.25 ? -0.5 * (0.25 - (abs(scale(\"x\", datum[\"bin_maxbins_10_IMDB Rating_end\"]) - scale(\"x\", datum[\"bin_maxbins_10_IMDB Rating\"])))) : 0)" + } + }, + "x": { + "scale": "x", + "field": "bin_maxbins_10_IMDB Rating_end", + "offset": { + "signal": "0.5 + (abs(scale(\"x\", datum[\"bin_maxbins_10_IMDB Rating_end\"]) - scale(\"x\", datum[\"bin_maxbins_10_IMDB Rating\"])) < 0.25 ? 0.5 * (0.25 - (abs(scale(\"x\", datum[\"bin_maxbins_10_IMDB Rating_end\"]) - scale(\"x\", datum[\"bin_maxbins_10_IMDB Rating\"])))) : 0)" + } }, "yc": {"scale": "y", "field": "__count"}, - "width": {"signal": "(1 - 0.25) * width"}, "height": {"value": 1} } } diff --git a/examples/compiled/tick_sort.vg.json b/examples/compiled/tick_sort.vg.json index 05a2fd5cfb..6ef43bf036 100644 --- a/examples/compiled/tick_sort.vg.json +++ b/examples/compiled/tick_sort.vg.json @@ -32,9 +32,9 @@ "description": { "signal": "\"Horsepower: \" + (format(datum[\"Horsepower\"], \"\"))" }, - "xc": {"scale": "x", "field": "Horsepower"}, "yc": {"signal": "height", "mult": 0.5}, - "height": {"signal": "(1 - 0.25) * height"}, + "height": {"signal": "0.75 * height"}, + "xc": {"scale": "x", "field": "Horsepower"}, "width": {"value": 1} } } diff --git a/examples/compiled/tick_strip.vg.json b/examples/compiled/tick_strip.vg.json index 30898730b9..5ec3cdd7a6 100644 --- a/examples/compiled/tick_strip.vg.json +++ b/examples/compiled/tick_strip.vg.json @@ -39,9 +39,9 @@ "description": { "signal": "\"Horsepower: \" + (format(datum[\"Horsepower\"], \"\")) + \"; Cylinders: \" + (isValid(datum[\"Cylinders\"]) ? datum[\"Cylinders\"] : \"\"+datum[\"Cylinders\"])" }, + "y": {"scale": "y", "field": "Cylinders"}, + "height": {"signal": "max(0.25, bandwidth('y'))"}, "xc": {"scale": "x", "field": "Horsepower"}, - "yc": {"scale": "y", "field": "Cylinders", "band": 0.5}, - "height": {"scale": "y", "band": 1}, "width": {"value": 1} } } diff --git a/examples/compiled/tick_strip_1D_with_height.vg.json b/examples/compiled/tick_strip_1D_with_height.vg.json index 921930cb87..bb9bc5ad61 100644 --- a/examples/compiled/tick_strip_1D_with_height.vg.json +++ b/examples/compiled/tick_strip_1D_with_height.vg.json @@ -32,9 +32,9 @@ "description": { "signal": "\"Horsepower: \" + (format(datum[\"Horsepower\"], \"\"))" }, - "xc": {"scale": "x", "field": "Horsepower"}, "yc": {"signal": "height", "mult": 0.5}, - "height": {"signal": "(1 - 0.25) * height"}, + "height": {"signal": "0.75 * height"}, + "xc": {"scale": "x", "field": "Horsepower"}, "width": {"value": 1} } } diff --git a/examples/compiled/tick_strip_tick_band.vg.json b/examples/compiled/tick_strip_tick_band.vg.json index 03f8c606a8..a9683dd1ca 100644 --- a/examples/compiled/tick_strip_tick_band.vg.json +++ b/examples/compiled/tick_strip_tick_band.vg.json @@ -38,9 +38,9 @@ "description": { "signal": "\"Horsepower: \" + (format(datum[\"Horsepower\"], \"\")) + \"; Cylinders: \" + (isValid(datum[\"Cylinders\"]) ? datum[\"Cylinders\"] : \"\"+datum[\"Cylinders\"])" }, + "y": {"scale": "y", "field": "Cylinders"}, + "height": {"signal": "max(0.25, bandwidth('y'))"}, "xc": {"scale": "x", "field": "Horsepower"}, - "yc": {"scale": "y", "field": "Cylinders", "band": 0.5}, - "height": {"scale": "y", "band": 1}, "width": {"value": 1} } } diff --git a/examples/compiled/tick_strip_with_height.vg.json b/examples/compiled/tick_strip_with_height.vg.json index 4991e6d247..9d4e96fbfa 100644 --- a/examples/compiled/tick_strip_with_height.vg.json +++ b/examples/compiled/tick_strip_with_height.vg.json @@ -33,9 +33,9 @@ "description": { "signal": "\"Horsepower: \" + (format(datum[\"Horsepower\"], \"\")) + \"; Cylinders: \" + (isValid(datum[\"Cylinders\"]) ? datum[\"Cylinders\"] : \"\"+datum[\"Cylinders\"])" }, + "y": {"scale": "y", "field": "Cylinders"}, + "height": {"signal": "max(0.25, bandwidth('y'))"}, "xc": {"scale": "x", "field": "Horsepower"}, - "yc": {"scale": "y", "field": "Cylinders", "band": 0.5}, - "height": {"scale": "y", "band": 1}, "width": {"value": 1} } } diff --git a/examples/compiled/tick_timeunit.png b/examples/compiled/tick_timeunit.png index 827505fbf0c0497cce3816e916d8984039cbb5dd..e0a4e8e49833517dc9047442aa66ca9c6f537b25 100644 GIT binary patch literal 12116 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 diff --git a/examples/compiled/tick_timeunit.svg b/examples/compiled/tick_timeunit.svg index 9338b1e40a..efd48ab69e 100644 --- a/examples/compiled/tick_timeunit.svg +++ b/examples/compiled/tick_timeunit.svg @@ -1 +1 @@ -2004200520062007200820092010date (year)01,0002,0003,0004,0005,0006,0007,000Sum of price \ No newline at end of file +20042005200620072008200920102011date (year)01,0002,0003,0004,0005,0006,0007,000Sum of price \ No newline at end of file diff --git a/examples/compiled/tick_timeunit.vg.json b/examples/compiled/tick_timeunit.vg.json index e5b840c35b..2120d002ad 100644 --- a/examples/compiled/tick_timeunit.vg.json +++ b/examples/compiled/tick_timeunit.vg.json @@ -21,7 +21,7 @@ }, { "type": "aggregate", - "groupby": ["year_date"], + "groupby": ["year_date", "year_date_end"], "ops": ["sum"], "fields": ["price"], "as": ["sum_price"] @@ -46,9 +46,21 @@ "description": { "signal": "\"date (year): \" + (timeFormat(datum[\"year_date\"], timeUnitSpecifier([\"year\"], {\"year-month\":\"%b %Y \",\"year-month-date\":\"%b %d, %Y \"}))) + \"; Sum of price: \" + (format(datum[\"sum_price\"], \"\"))" }, - "xc": {"scale": "x", "field": "year_date"}, + "x2": { + "scale": "x", + "field": "year_date", + "offset": { + "signal": "0.5 + (abs(scale(\"x\", datum[\"year_date_end\"]) - scale(\"x\", datum[\"year_date\"])) < 0.25 ? -0.5 * (0.25 - (abs(scale(\"x\", datum[\"year_date_end\"]) - scale(\"x\", datum[\"year_date\"])))) : 0)" + } + }, + "x": { + "scale": "x", + "field": "year_date_end", + "offset": { + "signal": "0.5 + (abs(scale(\"x\", datum[\"year_date_end\"]) - scale(\"x\", datum[\"year_date\"])) < 0.25 ? 0.5 * (0.25 - (abs(scale(\"x\", datum[\"year_date_end\"]) - scale(\"x\", datum[\"year_date\"])))) : 0)" + } + }, "yc": {"scale": "y", "field": "sum_price"}, - "width": {"signal": "(1 - 0.25) * width"}, "height": {"value": 1} } } @@ -58,7 +70,7 @@ { "name": "x", "type": "time", - "domain": {"data": "source_0", "field": "year_date"}, + "domain": {"data": "source_0", "fields": ["year_date", "year_date_end"]}, "range": [0, {"signal": "width"}] }, { diff --git a/examples/compiled/tick_width_band.png b/examples/compiled/tick_width_band.png index daa9b0baf3984a6de662a9fec80e67d0e5891c0e..731903b4bf0a7cc01117635635cca395f1451b49 100644 GIT binary patch literal 5727 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 diff --git a/examples/compiled/tick_width_band.svg b/examples/compiled/tick_width_band.svg index b2c50e4a56..7254e1955c 100644 --- a/examples/compiled/tick_width_band.svg +++ b/examples/compiled/tick_width_band.svg @@ -1 +1 @@ -ABCDEFGHIa020406080100b \ No newline at end of file +ABCDEFGHIa020406080100b \ No newline at end of file diff --git a/examples/compiled/tick_width_band.vg.json b/examples/compiled/tick_width_band.vg.json index 549c70dd1b..82ab7c4dab 100644 --- a/examples/compiled/tick_width_band.vg.json +++ b/examples/compiled/tick_width_band.vg.json @@ -52,9 +52,9 @@ "description": { "signal": "\"a: \" + (isValid(datum[\"a\"]) ? datum[\"a\"] : \"\"+datum[\"a\"]) + \"; b: \" + (format(datum[\"b\"], \"\"))" }, - "xc": {"scale": "x", "field": "a", "band": 0.5}, + "x": {"scale": "x", "field": "a", "band": 0.25}, + "width": {"signal": "max(0.25, 0.5 * bandwidth('x'))"}, "yc": {"scale": "y", "field": "b"}, - "width": {"value": {"band": 0.5}}, "height": {"value": 1} } }