From 12c2b10a57ed2dccbb091daae87e26a61f312260 Mon Sep 17 00:00:00 2001 From: Toph Tucker Date: Thu, 26 Jan 2023 10:50:09 -0800 Subject: [PATCH 01/22] Auto mark, working, with one test --- src/index.js | 1 + src/marks/auto.js | 348 +++++++++++++++++++++++++++++++++++++++++ test/plots/autoplot.js | 7 + test/plots/index.js | 1 + 4 files changed, 357 insertions(+) create mode 100644 src/marks/auto.js create mode 100644 test/plots/autoplot.js diff --git a/src/index.js b/src/index.js index 406907ba67..25da3f661d 100644 --- a/src/index.js +++ b/src/index.js @@ -2,6 +2,7 @@ export {plot} from "./plot.js"; export {Mark, marks} from "./mark.js"; export {Area, area, areaX, areaY} from "./marks/area.js"; export {Arrow, arrow} from "./marks/arrow.js"; +export {auto} from "./marks/auto.js"; export {axisX, axisY, axisFx, axisFy, gridX, gridY, gridFx, gridFy} from "./marks/axis.js"; export {BarX, BarY, barX, barY} from "./marks/bar.js"; export {boxX, boxY} from "./marks/box.js"; diff --git a/src/marks/auto.js b/src/marks/auto.js new file mode 100644 index 0000000000..f7a823ef11 --- /dev/null +++ b/src/marks/auto.js @@ -0,0 +1,348 @@ +import {isOrdinal, labelof, valueof, isOptions} from "../options.js"; +import {area, areaX, areaY} from "./area.js"; +import {dot} from "./dot.js"; +import {line, lineX, lineY} from "./line.js"; +import {ruleX, ruleY} from "./rule.js"; +import {barX, barY} from "./bar.js"; +import {rect, rectX, rectY} from "./rect.js"; +import {cell} from "./cell.js"; +import {frame} from "./frame.js"; +import {bin, binX, binY} from "../transforms/bin.js"; +import {group, groupX, groupY} from "../transforms/group.js"; +import {marks} from "../plot.js"; +import {ascending} from "d3"; + +// https://github.com/observablehq/stdlib/blob/main/src/table.js +const nChecks = 20; // number of values to check in each array + +export function auto(data, { x, y, fx, fy, color, size, mark } = {}) { + + // Shorthand: array of primitives should result in a histogram + if (x === undefined && y === undefined && arrayIsPrimitive(data)) x = d => d; + + // Allow x and y and other dimensions to be specified as shorthand + // field names (but note that they can also be specified as a + // {transform} object such as Plot.identity). + if (!isOptions(x)) x = makeOptions(x); + if (!isOptions(y)) y = makeOptions(y); + if (!isOptions(fx)) fx = makeOptions(fx); + if (!isOptions(fy)) fy = makeOptions(fy); + if (!isOptions(color)) color = makeOptions(color); + if (!isOptions(size)) size = makeOptions(size); + + const { value: xValue } = x; + const { value: yValue } = y; + + const { value: sizeValue, reduce: sizeReduce } = size; + + // Determine the default reducer, if any. + let { reduce: xReduce } = x; + let { reduce: yReduce } = y; + if (xReduce === undefined) + xReduce = + yReduce == null && xValue == null && sizeValue == null && yValue != null + ? "count" + : null; + if (yReduce === undefined) + yReduce = + xReduce == null && yValue == null && sizeValue == null && xValue != null + ? "count" + : null; + + const { zero: xZero } = x; + const { zero: yZero } = y; + const { value: colorValue, reduce: colorReduce } = color; + const { value: fxValue } = fx; + const { value: fyValue } = fy; + + // TODO Default sizeReduce for ordinal/ordinal case? + // TODO Allow x: {field: "red"}, too? + // TODO We might need maybeColorChannel to detect constant colors? + // TODO The line mark will need z? + // TODO Limit and sort for bar charts (e.g. alphabet)? + // TODO Support array of primitives with no channels? + // TODO Look at Plot warnings and see how many we can prevent + // TODO Default to something other than turbo for continuous? Like: + // scheme: (colorValue && isContinuous(color)) || colorReduce ? "ylgnbu" : undefined + + // To apply heuristics based on the data types (values), realize the + // columns. We could maybe look at the data.schema here, but Plot’s + // behavior depends on the actual values anyway, so this probably is + // what we want. By materializing the columns here, we also ensure + // that they aren’t re-computed later in Plot.plot. + x = valueof(data, xValue); + y = valueof(data, yValue); + color = valueof(data, colorValue); + size = valueof(data, sizeValue); + fx = valueof(data, fxValue); // TODO Should we still materialize if heuristic doesn't depend on it? + fy = valueof(data, fyValue); + + // (Toph) We wanna output to these but don't allow them in API yet + let fill, stroke, z, fillReduce, strokeReduce, zReduce; + + // Propagate the x and y labels (field names), if any. + if (x) x.label = labelof(xValue); + if (y) y.label = labelof(yValue); + if (color) color.label = labelof(colorValue); + if (size) size.label = labelof(sizeValue); + + // Determine the default mark type. + if (mark === undefined) { + mark = + sizeValue || sizeReduce + ? "dot" + : xReduce != null || yReduce != null || colorReduce != null + ? "bar" + : xValue != null && yValue != null + ? isContinuous(x) && + isContinuous(y) && + (isMonotonic(x) || isMonotonic(y)) + ? "line" + : (isContinuous(x) && xZero) || (isContinuous(y) && yZero) + ? "bar" + : "dot" + : xValue != null + ? "rule" + : yValue != null + ? "rule" + : null; + } + + // Determine the mark implementation. + if (mark != null) { + switch (`${mark}`.toLowerCase()) { + case "dot": + mark = dot; + stroke = color; + strokeReduce = colorReduce; + break; + case "line": + mark = x && y ? line : x ? lineX : lineY; // 1d line by index + stroke = color; + strokeReduce = colorReduce; + if (new Set(color).size > color?.length >> 1) { + // TODO isHighCardinality(color) + // TODO only if z not set by user + z = null; + } + break; + case "area": + // TODO: throw some errors; I'm not sure we ever want Plot.area; how does it work with ordinal? + mark = + x && y + ? isContinuous(x) && isMonotonic(x) + ? areaY + : isContinuous(y) && isMonotonic(y) + ? areaX + : area + : x + ? areaX + : areaY; // 1d area by index + fill = color; + fillReduce = colorReduce; + break; + case "rule": + mark = x ? ruleX : ruleY; + stroke = color; + strokeReduce = colorReduce; + break; + case "bar": + mark = + yReduce != null + ? isOrdinal(x) + ? barY + : rectY + : xReduce != null + ? isOrdinal(y) + ? barX + : rectX + : colorReduce != null + ? isOrdinal(x) && isOrdinal(y) + ? cell + : isOrdinal(x) + ? barY + : isOrdinal(y) + ? barX + : rect + : isOrdinal(x) && isOrdinal(y) + ? cell + : isOrdinal(y) + ? barX + : barY; + fill = color; + fillReduce = colorReduce; + break; + default: + throw new Error(`invalid mark: ${mark}`); + } + } + + // Determine the mark options. + let options = { x, y, fill, stroke, z, r: size, fx, fy }; + let transformOptions = { + fill: fillReduce, + stroke: strokeReduce, + z: zReduce, + r: sizeReduce + }; + if (xReduce != null && yReduce != null) { + throw new Error(`cannot reduce both x and y`); // for now at least + } else if (yReduce != null) { + options = isOrdinal(x) + ? groupX({ y: yReduce, ...transformOptions }, options) + : binX({ y: yReduce, ...transformOptions }, options); + } else if (xReduce != null) { + options = isOrdinal(y) + ? groupY({ x: xReduce, ...transformOptions }, options) + : binY({ x: xReduce, ...transformOptions }, options); + } else if (colorReduce != null || sizeReduce != null) { + if (isOrdinal(x) && isOrdinal(y)) { + options = group(transformOptions, options); + } else if (!isOrdinal(x) && !isOrdinal(y)) { + options = bin(transformOptions, options); + } else if (isOrdinal(x) && !isOrdinal(y)) { + options = binY(transformOptions, options); // bin y, group x + } else if (!isOrdinal(x) && isOrdinal(y)) { + options = binX(transformOptions, options); // bin x, group y + } + } + + return marks( + // x: { zero: xZero }, + // y: { zero: yZero }, + // color: colorValue == null && colorReduce == null ? null : { legend: true }, + // marks: [ + fx || fy ? frame({ stroke: "#eee" }) : null, + xZero ? ruleX([0]) : null, + yZero ? ruleY([0]) : null, + mark(data, options) + // ] + ); +} + +function isContinuous(values) { + return !isOrdinal(values); +} + +// TODO What about sorted within series? +function isMonotonic(values) { + let previous; + let previousOrder; + for (const value of values) { + if (value == null) continue; + if (previous === undefined) { previous = value; continue; } + const order = Math.sign(ascending(previous, value)); + if (!order) continue; // skip zero, NaN + if (previousOrder !== undefined && order !== previousOrder) return false; + previous = value; + previousOrder = order; + } + return true; +} + +function makeOptions(value) { + return isReducer(value) ? { reduce: value } : { value }; +} + +// https://github.com/observablehq/stdlib/blob/main/src/table.js +function arrayIsPrimitive(value) { + return ( + isTypedArray(value) || + arrayContainsPrimitives(value) || + arrayContainsDates(value) + ); +} + +// https://github.com/observablehq/stdlib/blob/main/src/table.js +function isTypedArray(value) { + return ( + value instanceof Int8Array || + value instanceof Int16Array || + value instanceof Int32Array || + value instanceof Uint8Array || + value instanceof Uint8ClampedArray || + value instanceof Uint16Array || + value instanceof Uint32Array || + value instanceof Float32Array || + value instanceof Float64Array + ); +} + +// https://github.com/observablehq/stdlib/blob/main/src/table.js +// Given an array, checks that the first n elements are primitives (number, +// string, boolean, bigint) of a consistent type. +function arrayContainsPrimitives(value) { + const n = Math.min(nChecks, value.length); + if (!(n > 0)) return false; + let type; + let hasPrimitive = false; // ensure we encounter 1+ primitives + for (let i = 0; i < n; ++i) { + const v = value[i]; + if (v == null) continue; // ignore null and undefined + const t = typeof v; + if (type === undefined) { + switch (t) { + case "number": + case "boolean": + case "string": + case "bigint": + type = t; + break; + default: + return false; + } + } else if (t !== type) { + return false; + } + hasPrimitive = true; + } + return hasPrimitive; +} + +// https://github.com/observablehq/stdlib/blob/main/src/table.js +// Given an array, checks that the first n elements are dates. +function arrayContainsDates(value) { + const n = Math.min(nChecks, value.length); + if (!(n > 0)) return false; + let hasDate = false; // ensure we encounter 1+ dates + for (let i = 0; i < n; ++i) { + const v = value[i]; + if (v == null) continue; // ignore null and undefined + if (!(v instanceof Date)) return false; + hasDate = true; + } + return hasDate; +} + +// https://github.com/observablehq/plot/blob/818562649280e155136f730fc496e0b3d15ae464/src/transforms/group.js#L236 +function isReducer(reduce) { + if (typeof reduce?.reduce === "function") return true; + if (/^p\d{2}$/i.test(reduce)) return true; + switch (`${reduce}`.toLowerCase()) { + case "first": + case "last": + case "count": + case "distinct": + case "sum": + case "proportion": + case "proportion-facet": // TODO remove me? + case "deviation": + case "min": + case "min-index": // TODO remove me? + case "max": + case "max-index": // TODO remove me? + case "mean": + case "median": + case "variance": + case "mode": + // These are technically reducers, but I think we’d want to treat them as fields? + // case "x": + // case "x1": + // case "x2": + // case "y": + // case "y1": + // case "y2": + return true; + } + return false; + } \ No newline at end of file diff --git a/test/plots/autoplot.js b/test/plots/autoplot.js new file mode 100644 index 0000000000..daf07376d9 --- /dev/null +++ b/test/plots/autoplot.js @@ -0,0 +1,7 @@ +import * as Plot from "@observablehq/plot"; +import * as d3 from "d3"; + +export async function autoHistogram() { + const athletes = await d3.csv("data/athletes.csv", d3.autoType); + return Plot.auto(athletes, {x: "weight"}).plot(); +} diff --git a/test/plots/index.js b/test/plots/index.js index fea350a24f..04d09a9c86 100644 --- a/test/plots/index.js +++ b/test/plots/index.js @@ -296,3 +296,4 @@ export * from "./raster-penguins.js"; export * from "./raster-vapor.js"; export * from "./raster-walmart.js"; export * from "./volcano.js"; +export * from "./autoplot.js"; \ No newline at end of file From 18e28a69cbf1ac7ac792700194e8cf7ba4699e85 Mon Sep 17 00:00:00 2001 From: Toph Tucker Date: Thu, 26 Jan 2023 12:32:43 -0800 Subject: [PATCH 02/22] more tests --- test/output/autoArea.svg | 68 + test/output/autoAreaStackColor.svg | 93 + test/output/autoBar.svg | 147 + test/output/autoBarColorReducer.svg | 58 + test/output/autoBarColorStack.svg | 63 + test/output/autoBarMean.svg | 92 + test/output/autoBarStackColor.svg | 63 + test/output/autoBarStackColorConstant.svg | 128 + test/output/autoBarStackColorField.svg | 183 + test/output/autoBarZero.svg | 150 + test/output/autoConnectedScatterplot.svg | 74 + test/output/autoDot.svg | 400 + test/output/autoDotBin.svg | 120 + test/output/autoDotBinned.svg | 120 + test/output/autoDotColor.svg | 470 + test/output/autoDotFacet.svg | 449 + test/output/autoDotFacet2.svg | 480 + test/output/autoDotGroup.svg | 45 + test/output/autoDotGrouped.svg | 45 + test/output/autoDotOrdCont.svg | 388 + test/output/autoDotOrdinal.svg | 12187 ++++++++++++++++++++ test/output/autoDotSize.svg | 1295 +++ test/output/autoDotSize2.svg | 403 + test/output/autoDotSized1.svg | 1295 +++ test/output/autoDotSized2.svg | 403 + test/output/autoDotUnsortedDate.svg | 11290 ++++++++++++++++++ test/output/autoDotUnsortedDates.svg | 11290 ++++++++++++++++++ test/output/autoHeatmap.svg | 129 + test/output/autoHeatmapOrdCont.svg | 75 + test/output/autoHeatmapOrdinal.svg | 45 + test/output/autoHistogram.svg | 151 + test/output/autoHistogramDate.svg | 131 + test/output/autoHistogramGroup.svg | 61 + test/output/autoHistogramLine.svg | 77 + test/output/autoLine.svg | 80 + test/output/autoLineColor.svg | 1280 ++ test/output/autoLineColorSeries.svg | 105 + test/output/autoLineFacet.svg | 276 + test/output/autoLineHistogram.svg | 77 + test/output/autoRectColorReducer.svg | 80 + test/output/autoRectColorStack.svg | 100 + test/output/autoRectStackColor.svg | 100 + test/output/autoShorthandContinuous.svg | 79 + test/output/autoShorthandOrdinal.svg | 82 + test/output/autoTickContinuous.svg | 377 + test/output/autoTickDate.svg | 11588 +++++++++++++++++++ test/output/autoTickOrdinal.svg | 373 + test/plots/autoplot.js | 189 + 48 files changed, 57254 insertions(+) create mode 100644 test/output/autoArea.svg create mode 100644 test/output/autoAreaStackColor.svg create mode 100644 test/output/autoBar.svg create mode 100644 test/output/autoBarColorReducer.svg create mode 100644 test/output/autoBarColorStack.svg create mode 100644 test/output/autoBarMean.svg create mode 100644 test/output/autoBarStackColor.svg create mode 100644 test/output/autoBarStackColorConstant.svg create mode 100644 test/output/autoBarStackColorField.svg create mode 100644 test/output/autoBarZero.svg create mode 100644 test/output/autoConnectedScatterplot.svg create mode 100644 test/output/autoDot.svg create mode 100644 test/output/autoDotBin.svg create mode 100644 test/output/autoDotBinned.svg create mode 100644 test/output/autoDotColor.svg create mode 100644 test/output/autoDotFacet.svg create mode 100644 test/output/autoDotFacet2.svg create mode 100644 test/output/autoDotGroup.svg create mode 100644 test/output/autoDotGrouped.svg create mode 100644 test/output/autoDotOrdCont.svg create mode 100644 test/output/autoDotOrdinal.svg create mode 100644 test/output/autoDotSize.svg create mode 100644 test/output/autoDotSize2.svg create mode 100644 test/output/autoDotSized1.svg create mode 100644 test/output/autoDotSized2.svg create mode 100644 test/output/autoDotUnsortedDate.svg create mode 100644 test/output/autoDotUnsortedDates.svg create mode 100644 test/output/autoHeatmap.svg create mode 100644 test/output/autoHeatmapOrdCont.svg create mode 100644 test/output/autoHeatmapOrdinal.svg create mode 100644 test/output/autoHistogram.svg create mode 100644 test/output/autoHistogramDate.svg create mode 100644 test/output/autoHistogramGroup.svg create mode 100644 test/output/autoHistogramLine.svg create mode 100644 test/output/autoLine.svg create mode 100644 test/output/autoLineColor.svg create mode 100644 test/output/autoLineColorSeries.svg create mode 100644 test/output/autoLineFacet.svg create mode 100644 test/output/autoLineHistogram.svg create mode 100644 test/output/autoRectColorReducer.svg create mode 100644 test/output/autoRectColorStack.svg create mode 100644 test/output/autoRectStackColor.svg create mode 100644 test/output/autoShorthandContinuous.svg create mode 100644 test/output/autoShorthandOrdinal.svg create mode 100644 test/output/autoTickContinuous.svg create mode 100644 test/output/autoTickDate.svg create mode 100644 test/output/autoTickOrdinal.svg diff --git a/test/output/autoArea.svg b/test/output/autoArea.svg new file mode 100644 index 0000000000..ccb5656256 --- /dev/null +++ b/test/output/autoArea.svg @@ -0,0 +1,68 @@ + + + + + 0 + + + 20 + + + 40 + + + 60 + + + 80 + + + 100 + + + 120 + + + 140 + + + 160 + + + 180 + ↑ Close + + + + 2014 + + + 2015 + + + 2016 + + + 2017 + + + 2018 + + + + + + \ No newline at end of file diff --git a/test/output/autoAreaStackColor.svg b/test/output/autoAreaStackColor.svg new file mode 100644 index 0000000000..de13e9818a --- /dev/null +++ b/test/output/autoAreaStackColor.svg @@ -0,0 +1,93 @@ + + + + + 0 + + + 2,000 + + + 4,000 + + + 6,000 + + + 8,000 + + + 10,000 + + + 12,000 + + + 14,000 + ↑ unemployed + + + + 2000 + + + 2001 + + + 2002 + + + 2003 + + + 2004 + + + 2005 + + + 2006 + + + 2007 + + + 2008 + + + 2009 + + + 2010 + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoBar.svg b/test/output/autoBar.svg new file mode 100644 index 0000000000..006c3d6463 --- /dev/null +++ b/test/output/autoBar.svg @@ -0,0 +1,147 @@ + + + + + A + + + B + + + C + + + D + + + E + + + F + + + G + + + H + + + I + + + J + + + K + + + L + + + M + + + N + + + O + + + P + + + Q + + + R + + + S + + + T + + + U + + + V + + + W + + + X + + + Y + + + Z + letter + + + + 0.00 + + + 0.02 + + + 0.04 + + + 0.06 + + + 0.08 + + + 0.10 + + + 0.12 + frequency → + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoBarColorReducer.svg b/test/output/autoBarColorReducer.svg new file mode 100644 index 0000000000..d862bd6b7d --- /dev/null +++ b/test/output/autoBarColorReducer.svg @@ -0,0 +1,58 @@ + + + + + Adelie + + + Chinstrap + + + Gentoo + species + + + + 0 + + + 20 + + + 40 + + + 60 + + + 80 + + + 100 + + + 120 + + + 140 + Frequency → + + + + + + + \ No newline at end of file diff --git a/test/output/autoBarColorStack.svg b/test/output/autoBarColorStack.svg new file mode 100644 index 0000000000..4cee85966e --- /dev/null +++ b/test/output/autoBarColorStack.svg @@ -0,0 +1,63 @@ + + + + + Adelie + + + Chinstrap + + + Gentoo + species + + + + 0 + + + 20 + + + 40 + + + 60 + + + 80 + + + 100 + + + 120 + + + 140 + Frequency → + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoBarMean.svg b/test/output/autoBarMean.svg new file mode 100644 index 0000000000..83c99fb2c1 --- /dev/null +++ b/test/output/autoBarMean.svg @@ -0,0 +1,92 @@ + + + + + 0 + + + 2 + + + 4 + + + 6 + + + 8 + + + 10 + + + 12 + + + 14 + + + 16 + + + 18 + + + 20 + + + 22 + + + 24 + ↑ temp_max + + + + 2012 + + + 2013 + + + 2014 + + + 2015 + + + 2016 + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoBarStackColor.svg b/test/output/autoBarStackColor.svg new file mode 100644 index 0000000000..4cee85966e --- /dev/null +++ b/test/output/autoBarStackColor.svg @@ -0,0 +1,63 @@ + + + + + Adelie + + + Chinstrap + + + Gentoo + species + + + + 0 + + + 20 + + + 40 + + + 60 + + + 80 + + + 100 + + + 120 + + + 140 + Frequency → + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoBarStackColorConstant.svg b/test/output/autoBarStackColorConstant.svg new file mode 100644 index 0000000000..5f630fdf65 --- /dev/null +++ b/test/output/autoBarStackColorConstant.svg @@ -0,0 +1,128 @@ + + + + + 0 + + + 100 + + + 200 + + + 300 + + + 400 + + + 500 + + + 600 + + + 700 + + + 800 + ↑ Frequency + + + + 1.2 + + + 1.3 + + + 1.4 + + + 1.5 + + + 1.6 + + + 1.7 + + + 1.8 + + + 1.9 + + + 2.0 + + + 2.1 + + + 2.2 + height → + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoBarStackColorField.svg b/test/output/autoBarStackColorField.svg new file mode 100644 index 0000000000..c28df57b45 --- /dev/null +++ b/test/output/autoBarStackColorField.svg @@ -0,0 +1,183 @@ + + + + + 0 + + + 100 + + + 200 + + + 300 + + + 400 + + + 500 + + + 600 + + + 700 + + + 800 + ↑ Frequency + + + + 1.2 + + + 1.3 + + + 1.4 + + + 1.5 + + + 1.6 + + + 1.7 + + + 1.8 + + + 1.9 + + + 2.0 + + + 2.1 + + + 2.2 + height → + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoBarZero.svg b/test/output/autoBarZero.svg new file mode 100644 index 0000000000..98d0194736 --- /dev/null +++ b/test/output/autoBarZero.svg @@ -0,0 +1,150 @@ + + + + + A + + + B + + + C + + + D + + + E + + + F + + + G + + + H + + + I + + + J + + + K + + + L + + + M + + + N + + + O + + + P + + + Q + + + R + + + S + + + T + + + U + + + V + + + W + + + X + + + Y + + + Z + letter + + + + 0.00 + + + 0.02 + + + 0.04 + + + 0.06 + + + 0.08 + + + 0.10 + + + 0.12 + frequency → + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoConnectedScatterplot.svg b/test/output/autoConnectedScatterplot.svg new file mode 100644 index 0000000000..bbda6ac1a5 --- /dev/null +++ b/test/output/autoConnectedScatterplot.svg @@ -0,0 +1,74 @@ + + + + + 1.4 + + + 1.6 + + + 1.8 + + + 2.0 + + + 2.2 + + + 2.4 + + + 2.6 + + + 2.8 + + + 3.0 + + + 3.2 + ↑ gas + + + + 4,000 + + + 5,000 + + + 6,000 + + + 7,000 + + + 8,000 + + + 9,000 + + + 10,000 + miles → + + + + + \ No newline at end of file diff --git a/test/output/autoDot.svg b/test/output/autoDot.svg new file mode 100644 index 0000000000..338aee05df --- /dev/null +++ b/test/output/autoDot.svg @@ -0,0 +1,400 @@ + + + + + 3,000 + + + 3,500 + + + 4,000 + + + 4,500 + + + 5,000 + + + 5,500 + + + 6,000 + ↑ body_mass_g + + + + 35 + + + 40 + + + 45 + + + 50 + + + 55 + culmen_length_mm → + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoDotBin.svg b/test/output/autoDotBin.svg new file mode 100644 index 0000000000..aab0f99744 --- /dev/null +++ b/test/output/autoDotBin.svg @@ -0,0 +1,120 @@ + + + + + 3,000 + + + 3,500 + + + 4,000 + + + 4,500 + + + 5,000 + + + 5,500 + + + 6,000 + ↑ body_mass_g + + + + 35 + + + 40 + + + 45 + + + 50 + + + 55 + culmen_length_mm → + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoDotBinned.svg b/test/output/autoDotBinned.svg new file mode 100644 index 0000000000..aab0f99744 --- /dev/null +++ b/test/output/autoDotBinned.svg @@ -0,0 +1,120 @@ + + + + + 3,000 + + + 3,500 + + + 4,000 + + + 4,500 + + + 5,000 + + + 5,500 + + + 6,000 + ↑ body_mass_g + + + + 35 + + + 40 + + + 45 + + + 50 + + + 55 + culmen_length_mm → + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoDotColor.svg b/test/output/autoDotColor.svg new file mode 100644 index 0000000000..0c23068232 --- /dev/null +++ b/test/output/autoDotColor.svg @@ -0,0 +1,470 @@ + + + + + 2,000 + + + 2,500 + + + 3,000 + + + 3,500 + + + 4,000 + + + 4,500 + + + 5,000 + ↑ weight (lb) + + + + 60 + + + 80 + + + 100 + + + 120 + + + 140 + + + 160 + + + 180 + + + 200 + + + 220 + power (hp) → + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoDotFacet.svg b/test/output/autoDotFacet.svg new file mode 100644 index 0000000000..f4bf2462a9 --- /dev/null +++ b/test/output/autoDotFacet.svg @@ -0,0 +1,449 @@ + + + + + 34 + + + 36 + + + 38 + + + 40 + + + 42 + + + 44 + + + 46 + + + 48 + + + 50 + + + 52 + + + 54 + + + 56 + + + 58 + ↑ culmen_length_mm + + + + Biscoe + + + Dream + + + Torgersen + + + + + 4,000 + + + 6,000 + + + + + 4,000 + + + 6,000 + + + + + 4,000 + + + 6,000 + body_mass_g → + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoDotFacet2.svg b/test/output/autoDotFacet2.svg new file mode 100644 index 0000000000..94c69add17 --- /dev/null +++ b/test/output/autoDotFacet2.svg @@ -0,0 +1,480 @@ + + + + + Adelie + + + Chinstrap + + + Gentoo + + + + + Biscoe + + + Dream + + + Torgersen + + + + + 35 + + + 40 + + + 45 + + + 50 + + + 55 + ↑ culmen_length_mm + + + + 35 + + + 40 + + + 45 + + + 50 + + + 55 + + + + + 35 + + + 40 + + + 45 + + + 50 + + + 55 + + + + + 4,000 + + + 6,000 + + + + + 4,000 + + + 6,000 + + + + + 4,000 + + + 6,000 + body_mass_g → + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoDotGroup.svg b/test/output/autoDotGroup.svg new file mode 100644 index 0000000000..b4f2a0338c --- /dev/null +++ b/test/output/autoDotGroup.svg @@ -0,0 +1,45 @@ + + + + + Adelie + + + Chinstrap + + + Gentoo + species + + + + Biscoe + + + Dream + + + Torgersen + island + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoDotGrouped.svg b/test/output/autoDotGrouped.svg new file mode 100644 index 0000000000..b4f2a0338c --- /dev/null +++ b/test/output/autoDotGrouped.svg @@ -0,0 +1,45 @@ + + + + + Adelie + + + Chinstrap + + + Gentoo + species + + + + Biscoe + + + Dream + + + Torgersen + island + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoDotOrdCont.svg b/test/output/autoDotOrdCont.svg new file mode 100644 index 0000000000..9b22b041ed --- /dev/null +++ b/test/output/autoDotOrdCont.svg @@ -0,0 +1,388 @@ + + + + + Adelie + + + Chinstrap + + + Gentoo + species + + + + 35 + + + 40 + + + 45 + + + 50 + + + 55 + culmen_length_mm → + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoDotOrdinal.svg b/test/output/autoDotOrdinal.svg new file mode 100644 index 0000000000..0603d3cd36 --- /dev/null +++ b/test/output/autoDotOrdinal.svg @@ -0,0 +1,12187 @@ + + + + + AFG + + + ALB + + + ALG + + + AND + + + ANG + + + ANT + + + ARG + + + ARM + + + ARU + + + ASA + + + AUS + + + AUT + + + AZE + + + BAH + + + BAN + + + BAR + + + BDI + + + BEL + + + BEN + + + BER + + + BHU + + + BIH + + + BIZ + + + BLR + + + BOL + + + BOT + + + BRA + + + BRN + + + BRU + + + BUL + + + BUR + + + CAF + + + CAM + + + CAN + + + CAY + + + CGO + + + CHA + + + CHI + + + CHN + + + CIV + + + CMR + + + COD + + + COK + + + COL + + + COM + + + CPV + + + CRC + + + CRO + + + CUB + + + CYP + + + CZE + + + DEN + + + DJI + + + DMA + + + DOM + + + ECU + + + EGY + + + ERI + + + ESA + + + ESP + + + EST + + + ETH + + + FIJ + + + FIN + + + FRA + + + FSM + + + GAB + + + GAM + + + GBR + + + GBS + + + GEO + + + GEQ + + + GER + + + GHA + + + GRE + + + GRN + + + GUA + + + GUI + + + GUM + + + GUY + + + HAI + + + HKG + + + HON + + + HUN + + + INA + + + IND + + + IOA + + + IRI + + + IRL + + + IRQ + + + ISL + + + ISR + + + ISV + + + ITA + + + IVB + + + JAM + + + JOR + + + JPN + + + KAZ + + + KEN + + + KGZ + + + KIR + + + KOR + + + KOS + + + KSA + + + LAO + + + LAT + + + LBA + + + LBR + + + LCA + + + LES + + + LIB + + + LIE + + + LTU + + + LUX + + + MAD + + + MAR + + + MAS + + + MAW + + + MDA + + + MDV + + + MEX + + + MGL + + + MHL + + + MKD + + + MLI + + + MLT + + + MNE + + + MON + + + MOZ + + + MRI + + + MTN + + + MYA + + + NAM + + + NCA + + + NED + + + NEP + + + NGR + + + NIG + + + NOR + + + NRU + + + NZL + + + OMA + + + PAK + + + PAN + + + PAR + + + PER + + + PHI + + + PLE + + + PLW + + + PNG + + + POL + + + POR + + + PRK + + + PUR + + + QAT + + + ROT + + + ROU + + + RSA + + + RUS + + + RWA + + + SAM + + + SEN + + + SEY + + + SIN + + + SKN + + + SLE + + + SLO + + + SMR + + + SOL + + + SOM + + + SRB + + + SRI + + + SSD + + + STP + + + SUD + + + SUI + + + SUR + + + SVK + + + SWE + + + SWZ + + + SYR + + + TAN + + + TGA + + + THA + + + TJK + + + TKM + + + TLS + + + TOG + + + TPE + + + TTO + + + TUN + + + TUR + + + TUV + + + UAE + + + UGA + + + UKR + + + URU + + + USA + + + UZB + + + VAN + + + VEN + + + VIE + + + VIN + + + YEM + + + ZAM + + + ZIM + nationality + + + + female + + + male + sex + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoDotSize.svg b/test/output/autoDotSize.svg new file mode 100644 index 0000000000..8dbcfea5ba --- /dev/null +++ b/test/output/autoDotSize.svg @@ -0,0 +1,1295 @@ + + + + + 2014 + + + 2015 + + + 2016 + + + 2017 + + + 2018 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoDotSize2.svg b/test/output/autoDotSize2.svg new file mode 100644 index 0000000000..932f40337e --- /dev/null +++ b/test/output/autoDotSize2.svg @@ -0,0 +1,403 @@ + + + + + 14 + + + 15 + + + 16 + + + 17 + + + 18 + + + 19 + + + 20 + + + 21 + ↑ culmen_depth_mm + + + + 35 + + + 40 + + + 45 + + + 50 + + + 55 + culmen_length_mm → + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoDotSized1.svg b/test/output/autoDotSized1.svg new file mode 100644 index 0000000000..8dbcfea5ba --- /dev/null +++ b/test/output/autoDotSized1.svg @@ -0,0 +1,1295 @@ + + + + + 2014 + + + 2015 + + + 2016 + + + 2017 + + + 2018 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoDotSized2.svg b/test/output/autoDotSized2.svg new file mode 100644 index 0000000000..932f40337e --- /dev/null +++ b/test/output/autoDotSized2.svg @@ -0,0 +1,403 @@ + + + + + 14 + + + 15 + + + 16 + + + 17 + + + 18 + + + 19 + + + 20 + + + 21 + ↑ culmen_depth_mm + + + + 35 + + + 40 + + + 45 + + + 50 + + + 55 + culmen_length_mm → + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoDotUnsortedDate.svg b/test/output/autoDotUnsortedDate.svg new file mode 100644 index 0000000000..535075c4eb --- /dev/null +++ b/test/output/autoDotUnsortedDate.svg @@ -0,0 +1,11290 @@ + + + + + 1.3 + + + 1.4 + + + 1.5 + + + 1.6 + + + 1.7 + + + 1.8 + + + 1.9 + + + 2.0 + + + 2.1 + + + 2.2 + ↑ height + + + + 1955 + + + 1960 + + + 1965 + + + 1970 + + + 1975 + + + 1980 + + + 1985 + + + 1990 + + + 1995 + + + 2000 + date_of_birth → + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoDotUnsortedDates.svg b/test/output/autoDotUnsortedDates.svg new file mode 100644 index 0000000000..535075c4eb --- /dev/null +++ b/test/output/autoDotUnsortedDates.svg @@ -0,0 +1,11290 @@ + + + + + 1.3 + + + 1.4 + + + 1.5 + + + 1.6 + + + 1.7 + + + 1.8 + + + 1.9 + + + 2.0 + + + 2.1 + + + 2.2 + ↑ height + + + + 1955 + + + 1960 + + + 1965 + + + 1970 + + + 1975 + + + 1980 + + + 1985 + + + 1990 + + + 1995 + + + 2000 + date_of_birth → + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoHeatmap.svg b/test/output/autoHeatmap.svg new file mode 100644 index 0000000000..c516f381a7 --- /dev/null +++ b/test/output/autoHeatmap.svg @@ -0,0 +1,129 @@ + + + + + 2,500 + + + 3,000 + + + 3,500 + + + 4,000 + + + 4,500 + + + 5,000 + + + 5,500 + + + 6,000 + + + 6,500 + ↑ body_mass_g + + + + 35 + + + 40 + + + 45 + + + 50 + + + 55 + + + 60 + culmen_length_mm → + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoHeatmapOrdCont.svg b/test/output/autoHeatmapOrdCont.svg new file mode 100644 index 0000000000..8eddb40b9a --- /dev/null +++ b/test/output/autoHeatmapOrdCont.svg @@ -0,0 +1,75 @@ + + + + + Adelie + + + Chinstrap + + + Gentoo + species + + + + 35 + + + 40 + + + 45 + + + 50 + + + 55 + + + 60 + culmen_length_mm → + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoHeatmapOrdinal.svg b/test/output/autoHeatmapOrdinal.svg new file mode 100644 index 0000000000..4dedcf37b8 --- /dev/null +++ b/test/output/autoHeatmapOrdinal.svg @@ -0,0 +1,45 @@ + + + + + Adelie + + + Chinstrap + + + Gentoo + species + + + + Biscoe + + + Dream + + + Torgersen + island + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoHistogram.svg b/test/output/autoHistogram.svg new file mode 100644 index 0000000000..d9fd82fdfb --- /dev/null +++ b/test/output/autoHistogram.svg @@ -0,0 +1,151 @@ + + + + + 0 + + + 50 + + + 100 + + + 150 + + + 200 + + + 250 + + + 300 + + + 350 + + + 400 + + + 450 + + + 500 + + + 550 + + + 600 + ↑ Frequency + + + + 40 + + + 60 + + + 80 + + + 100 + + + 120 + + + 140 + + + 160 + weight → + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoHistogramDate.svg b/test/output/autoHistogramDate.svg new file mode 100644 index 0000000000..30181c9659 --- /dev/null +++ b/test/output/autoHistogramDate.svg @@ -0,0 +1,131 @@ + + + + + 0 + + + 100 + + + 200 + + + 300 + + + 400 + + + 500 + + + 600 + + + 700 + + + 800 + + + 900 + ↑ Frequency + + + + 1955 + + + 1960 + + + 1965 + + + 1970 + + + 1975 + + + 1980 + + + 1985 + + + 1990 + + + 1995 + + + 2000 + date_of_birth → + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoHistogramGroup.svg b/test/output/autoHistogramGroup.svg new file mode 100644 index 0000000000..f909117152 --- /dev/null +++ b/test/output/autoHistogramGroup.svg @@ -0,0 +1,61 @@ + + + + + 0 + + + 20 + + + 40 + + + 60 + + + 80 + + + 100 + + + 120 + + + 140 + + + 160 + ↑ Frequency + + + + Biscoe + + + Dream + + + Torgersen + island + + + + + + + \ No newline at end of file diff --git a/test/output/autoHistogramLine.svg b/test/output/autoHistogramLine.svg new file mode 100644 index 0000000000..24e1b5a691 --- /dev/null +++ b/test/output/autoHistogramLine.svg @@ -0,0 +1,77 @@ + + + + + 20 + + + 40 + + + 60 + + + 80 + + + 100 + + + 120 + + + 140 + + + 160 + + + 180 + + + 200 + + + 220 + + + 240 + + + 260 + ↑ Frequency + + + + 50,000,000 + + + 100,000,000 + + + 150,000,000 + + + 200,000,000 + + + 250,000,000 + Volume → + + + + + \ No newline at end of file diff --git a/test/output/autoLine.svg b/test/output/autoLine.svg new file mode 100644 index 0000000000..83256fe1a3 --- /dev/null +++ b/test/output/autoLine.svg @@ -0,0 +1,80 @@ + + + + + 60 + + + 70 + + + 80 + + + 90 + + + 100 + + + 110 + + + 120 + + + 130 + + + 140 + + + 150 + + + 160 + + + 170 + + + 180 + + + 190 + ↑ Close + + + + 2014 + + + 2015 + + + 2016 + + + 2017 + + + 2018 + + + + + + \ No newline at end of file diff --git a/test/output/autoLineColor.svg b/test/output/autoLineColor.svg new file mode 100644 index 0000000000..6cb8df269c --- /dev/null +++ b/test/output/autoLineColor.svg @@ -0,0 +1,1280 @@ + + + + + 60 + + + 70 + + + 80 + + + 90 + + + 100 + + + 110 + + + 120 + + + 130 + + + 140 + + + 150 + + + 160 + + + 170 + + + 180 + + + 190 + ↑ Close + + + + 2014 + + + 2015 + + + 2016 + + + 2017 + + + 2018 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoLineColorSeries.svg b/test/output/autoLineColorSeries.svg new file mode 100644 index 0000000000..6d5b4e29e7 --- /dev/null +++ b/test/output/autoLineColorSeries.svg @@ -0,0 +1,105 @@ + + + + + 200 + + + 400 + + + 600 + + + 800 + + + 1,000 + + + 1,200 + + + 1,400 + + + 1,600 + + + 1,800 + + + 2,000 + + + 2,200 + + + 2,400 + ↑ unemployed + + + + 2000 + + + 2001 + + + 2002 + + + 2003 + + + 2004 + + + 2005 + + + 2006 + + + 2007 + + + 2008 + + + 2009 + + + 2010 + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoLineFacet.svg b/test/output/autoLineFacet.svg new file mode 100644 index 0000000000..b1ad988acc --- /dev/null +++ b/test/output/autoLineFacet.svg @@ -0,0 +1,276 @@ + + + + + Agriculture + + + Business services + + + Construction + + + Education and Health + + + Finance + + + Government + + + Information + + + Leisure and hospitality + + + Manufacturing + + + Mining and Extraction + + + Other + + + Self-employed + + + Transportation and Utilities + + + Wholesale and Retail Trade + + + + + 2000 + + + 2002 + + + 2004 + + + 2006 + + + 2008 + + + 2010 + + + + + 1,000 + + + 2,000 + ↑ unemployed + + + + 1,000 + + + 2,000 + + + + + 1,000 + + + 2,000 + + + + + 1,000 + + + 2,000 + + + + + 1,000 + + + 2,000 + + + + + 1,000 + + + 2,000 + + + + + 1,000 + + + 2,000 + + + + + 1,000 + + + 2,000 + + + + + 1,000 + + + 2,000 + + + + + 1,000 + + + 2,000 + + + + + 1,000 + + + 2,000 + + + + + 1,000 + + + 2,000 + + + + + 1,000 + + + 2,000 + + + + + 1,000 + + + 2,000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoLineHistogram.svg b/test/output/autoLineHistogram.svg new file mode 100644 index 0000000000..24e1b5a691 --- /dev/null +++ b/test/output/autoLineHistogram.svg @@ -0,0 +1,77 @@ + + + + + 20 + + + 40 + + + 60 + + + 80 + + + 100 + + + 120 + + + 140 + + + 160 + + + 180 + + + 200 + + + 220 + + + 240 + + + 260 + ↑ Frequency + + + + 50,000,000 + + + 100,000,000 + + + 150,000,000 + + + 200,000,000 + + + 250,000,000 + Volume → + + + + + \ No newline at end of file diff --git a/test/output/autoRectColorReducer.svg b/test/output/autoRectColorReducer.svg new file mode 100644 index 0000000000..ecf775e663 --- /dev/null +++ b/test/output/autoRectColorReducer.svg @@ -0,0 +1,80 @@ + + + + + 0 + + + 5 + + + 10 + + + 15 + + + 20 + + + 25 + + + 30 + + + 35 + + + 40 + ↑ Frequency + + + + 35 + + + 40 + + + 45 + + + 50 + + + 55 + + + 60 + culmen_length_mm → + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoRectColorStack.svg b/test/output/autoRectColorStack.svg new file mode 100644 index 0000000000..48bcb198ee --- /dev/null +++ b/test/output/autoRectColorStack.svg @@ -0,0 +1,100 @@ + + + + + 0 + + + 5 + + + 10 + + + 15 + + + 20 + + + 25 + + + 30 + + + 35 + + + 40 + ↑ Frequency + + + + 35 + + + 40 + + + 45 + + + 50 + + + 55 + + + 60 + culmen_length_mm → + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoRectStackColor.svg b/test/output/autoRectStackColor.svg new file mode 100644 index 0000000000..48bcb198ee --- /dev/null +++ b/test/output/autoRectStackColor.svg @@ -0,0 +1,100 @@ + + + + + 0 + + + 5 + + + 10 + + + 15 + + + 20 + + + 25 + + + 30 + + + 35 + + + 40 + ↑ Frequency + + + + 35 + + + 40 + + + 45 + + + 50 + + + 55 + + + 60 + culmen_length_mm → + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoShorthandContinuous.svg b/test/output/autoShorthandContinuous.svg new file mode 100644 index 0000000000..d82f67410c --- /dev/null +++ b/test/output/autoShorthandContinuous.svg @@ -0,0 +1,79 @@ + + + + + 0.0 + + + 0.2 + + + 0.4 + + + 0.6 + + + 0.8 + + + 1.0 + + + 1.2 + + + 1.4 + + + 1.6 + + + 1.8 + + + 2.0 + ↑ Frequency + + + + 0 + + + 1 + + + 2 + + + 3 + + + 4 + + + 5 + + + 6 + + + + + + + + \ No newline at end of file diff --git a/test/output/autoShorthandOrdinal.svg b/test/output/autoShorthandOrdinal.svg new file mode 100644 index 0000000000..4a2126d44c --- /dev/null +++ b/test/output/autoShorthandOrdinal.svg @@ -0,0 +1,82 @@ + + + + + 0.0 + + + 0.2 + + + 0.4 + + + 0.6 + + + 0.8 + + + 1.0 + + + 1.2 + + + 1.4 + + + 1.6 + + + 1.8 + + + 2.0 + + + 2.2 + + + 2.4 + + + 2.6 + + + 2.8 + + + 3.0 + ↑ Frequency + + + + apple + + + orange + + + pomegranate + + + + + + + + \ No newline at end of file diff --git a/test/output/autoTickContinuous.svg b/test/output/autoTickContinuous.svg new file mode 100644 index 0000000000..27d9ceb0ee --- /dev/null +++ b/test/output/autoTickContinuous.svg @@ -0,0 +1,377 @@ + + + + + 35 + + + 40 + + + 45 + + + 50 + + + 55 + culmen_length_mm → + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoTickDate.svg b/test/output/autoTickDate.svg new file mode 100644 index 0000000000..728a602305 --- /dev/null +++ b/test/output/autoTickDate.svg @@ -0,0 +1,11588 @@ + + + + + 1955 + + + 1960 + + + 1965 + + + 1970 + + + 1975 + + + 1980 + + + 1985 + + + 1990 + + + 1995 + + + 2000 + date_of_birth → + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoTickOrdinal.svg b/test/output/autoTickOrdinal.svg new file mode 100644 index 0000000000..65d3aa3f35 --- /dev/null +++ b/test/output/autoTickOrdinal.svg @@ -0,0 +1,373 @@ + + + + + Biscoe + + + Dream + + + Torgersen + island + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/plots/autoplot.js b/test/plots/autoplot.js index daf07376d9..37bed54312 100644 --- a/test/plots/autoplot.js +++ b/test/plots/autoplot.js @@ -5,3 +5,192 @@ export async function autoHistogram() { const athletes = await d3.csv("data/athletes.csv", d3.autoType); return Plot.auto(athletes, {x: "weight"}).plot(); } + +export async function autoHistogramDate() { + const athletes = await d3.csv("data/athletes.csv", d3.autoType); + return Plot.auto(athletes, {x: "date_of_birth"}).plot(); +} + +export async function autoHistogramGroup() { + const penguins = await d3.csv("data/penguins.csv", d3.autoType); + return Plot.auto(penguins, {x: "island"}).plot(); +} + +export async function autoTickContinuous() { + const penguins = await d3.csv("data/penguins.csv", d3.autoType); + return Plot.auto(penguins, {x: "culmen_length_mm", y: {reduce: null}}).plot(); +} + +export async function autoTickOrdinal() { + const penguins = await d3.csv("data/penguins.csv", d3.autoType); + return Plot.auto(penguins, {x: "island", y: {reduce: null}}).plot(); +} + +export async function autoTickDate() { + const athletes = await d3.csv("data/athletes.csv", d3.autoType); + return Plot.auto(athletes, {x: "date_of_birth", y: {reduce: null}}).plot(); +} + +export async function autoLineHistogram() { + const aapl = await d3.csv("data/aapl.csv", d3.autoType); + return Plot.auto(aapl, {x: "Volume", mark: "line"}).plot(); +} + +export async function autoLine() { + const aapl = await d3.csv("data/aapl.csv", d3.autoType); + return Plot.auto(aapl, {x: "Date", y: "Close"}).plot(); +} + +export async function autoArea() { + const aapl = await d3.csv("data/aapl.csv", d3.autoType); + return Plot.auto(aapl, {x: "Date", y: "Close", mark: "area"}).plot(); +} + +export async function autoDot() { + const penguins = await d3.csv("data/penguins.csv", d3.autoType); + return Plot.auto(penguins, {x: "culmen_length_mm", y: "body_mass_g"}).plot(); +} + +export async function autoDotOrdinal() { + const athletes = await d3.csv("data/athletes.csv", d3.autoType); + return Plot.auto(athletes, {x: "sex", y: "nationality"}).plot(); +} + +export async function autoDotOrdCont() { + const penguins = await d3.csv("data/penguins.csv", d3.autoType); + return Plot.auto(penguins, {x: "culmen_length_mm", y: "species"}).plot(); +} + +export async function autoBar() { + const alphabet = await d3.csv("data/alphabet.csv", d3.autoType); + return Plot.auto(alphabet, {x: "frequency", y: "letter", mark: "bar"}).plot(); +} + +export async function autoBarZero() { + const alphabet = await d3.csv("data/alphabet.csv", d3.autoType); + return Plot.auto(alphabet, {x: {value: "frequency", zero: true}, y: "letter"}).plot(); +} + +export async function autoConnectedScatterplot() { + const driving = await d3.csv("data/driving.csv", d3.autoType); + return Plot.auto(driving, {x: "miles", y: "gas", mark: "line"}).plot(); +} + +// shouldnt make a line +export async function autoDotUnsortedDate() { + const athletes = await d3.csv("data/athletes.csv", d3.autoType); + return Plot.auto(athletes, {x: "date_of_birth", y: "height"}).plot(); +} + +export async function autoDotSize() { + const aapl = await d3.csv("data/aapl.csv", d3.autoType); + return Plot.auto(aapl, {x: "Date", size: "Volume"}).plot(); +} + +export async function autoDotSize2() { + const penguins = await d3.csv("data/penguins.csv", d3.autoType); + return Plot.auto(penguins, {x: "culmen_length_mm", y: "culmen_depth_mm", size: "body_mass_g"}).plot(); +} + +export async function autoDotGroup() { + const penguins = await d3.csv("data/penguins.csv", d3.autoType); + return Plot.auto(penguins, {x: "island", y: "species", size: "count"}).plot(); +} + +export async function autoDotBin() { + const penguins = await d3.csv("data/penguins.csv", d3.autoType); + return Plot.auto(penguins, {x: "culmen_length_mm", y: "body_mass_g", size: "count"}).plot(); +} + +export async function autoDotColor() { + const cars = await d3.csv("data/cars.csv", d3.autoType); + return Plot.auto(cars, {x: "power (hp)", y: "weight (lb)", color: "0-60 mph (s)"}).plot(); +} + +export async function autoHeatmapOrdCont() { + const penguins = await d3.csv("data/penguins.csv", d3.autoType); + return Plot.auto(penguins, {x: "culmen_length_mm", y: "species", color: "count"}).plot(); +} + +export async function autoHeatmap() { + const penguins = await d3.csv("data/penguins.csv", d3.autoType); + return Plot.auto(penguins, {x: "culmen_length_mm", y: "body_mass_g", color: "count"}).plot(); +} + +export async function autoHeatmapOrdinal() { + const penguins = await d3.csv("data/penguins.csv", d3.autoType); + return Plot.auto(penguins, {x: "island", y: "species", color: "count"}).plot(); +} + +export async function autoBarStackColor() { + const penguins = await d3.csv("data/penguins.csv", d3.autoType); + return Plot.auto(penguins, {y: "species", color: "sex"}).plot(); +} + +export async function autoBarColorReducer() { + const penguins = await d3.csv("data/penguins.csv", d3.autoType); + return Plot.auto(penguins, {y: "species", color: "count"}).plot(); +} + +export async function autoRectStackColor() { + const penguins = await d3.csv("data/penguins.csv", d3.autoType); + return Plot.auto(penguins, {x: "culmen_length_mm", color: "island"}).plot(); +} + +export async function autoRectColorReducer() { + const penguins = await d3.csv("data/penguins.csv", d3.autoType); + return Plot.auto(penguins, {x: "culmen_length_mm", color: {value: "island", reduce: "mode"}}).plot(); +} + +export async function autoLineColor() { + const aapl = await d3.csv("data/aapl.csv", d3.autoType); + return Plot.auto(aapl, {x: "Date", y: "Close", color: "Close"}).plot(); +} + +export async function autoLineColorSeries() { + const industries = await d3.csv("data/bls-industry-unemployment.csv", d3.autoType); + return Plot.auto(industries, {x: "date", y: "unemployed", color: "industry"}).plot(); +} + +export async function autoAreaStackColor() { + const industries = await d3.csv("data/bls-industry-unemployment.csv", d3.autoType); + return Plot.auto(industries, {x: "date", y: "unemployed", color: "industry", mark: "area"}).plot(); +} + +export async function autoBarStackColorField() { + const athletes = await d3.csv("data/athletes.csv", d3.autoType); + return Plot.auto(athletes, {x: "height", color: "gold"}).plot(); +} + +export async function autoBarStackColorConstant() { + const athletes = await d3.csv("data/athletes.csv", d3.autoType); + return Plot.auto(athletes, {x: "height", color: () => "gold"}).plot(); +} + +export async function autoBarMean() { + const weather = await d3.csv("data/seattle-weather.csv", d3.autoType); + return Plot.auto(weather, {x: "date", y: {value: "temp_max", reduce: "mean"}}).plot(); +} + +export async function autoLineFacet() { + const industries = await d3.csv("data/bls-industry-unemployment.csv", d3.autoType); + return Plot.auto(industries, {x: "date", y: "unemployed", fy: "industry"}).plot(); +} + +export async function autoDotFacet() { + const penguins = await d3.csv("data/penguins.csv", d3.autoType); + return Plot.auto(penguins, {x: "body_mass_g", y: "culmen_length_mm", fx: "island", color: "sex"}).plot(); +} + +export async function autoDotFacet2() { + const penguins = await d3.csv("data/penguins.csv", d3.autoType); + return Plot.auto(penguins, {x: "body_mass_g", y: "culmen_length_mm", fx: "island", fy: "species", color: "sex"}).plot(); +} + +export async function autoShorthandContinuous() { + return Plot.auto([1,1,2,3,5]).plot(); +} + +export async function autoShorthandOrdinal() { + return Plot.auto(["apple", "apple", "orange", "apple", "orange", "pomegranate"]).plot(); +} From fbe1846de4cd3e057fe3028319c471dcc4b685cb Mon Sep 17 00:00:00 2001 From: Toph Tucker Date: Thu, 26 Jan 2023 13:49:33 -0800 Subject: [PATCH 03/22] pReTtIeR --- src/marks/auto.js | 118 +++++++++++++++++++++------------------------- 1 file changed, 54 insertions(+), 64 deletions(-) diff --git a/src/marks/auto.js b/src/marks/auto.js index f7a823ef11..7dfd89ff5f 100644 --- a/src/marks/auto.js +++ b/src/marks/auto.js @@ -15,11 +15,10 @@ import {ascending} from "d3"; // https://github.com/observablehq/stdlib/blob/main/src/table.js const nChecks = 20; // number of values to check in each array -export function auto(data, { x, y, fx, fy, color, size, mark } = {}) { - +export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { // Shorthand: array of primitives should result in a histogram - if (x === undefined && y === undefined && arrayIsPrimitive(data)) x = d => d; - + if (x === undefined && y === undefined && arrayIsPrimitive(data)) x = (d) => d; + // Allow x and y and other dimensions to be specified as shorthand // field names (but note that they can also be specified as a // {transform} object such as Plot.identity). @@ -30,30 +29,24 @@ export function auto(data, { x, y, fx, fy, color, size, mark } = {}) { if (!isOptions(color)) color = makeOptions(color); if (!isOptions(size)) size = makeOptions(size); - const { value: xValue } = x; - const { value: yValue } = y; + const {value: xValue} = x; + const {value: yValue} = y; - const { value: sizeValue, reduce: sizeReduce } = size; + const {value: sizeValue, reduce: sizeReduce} = size; // Determine the default reducer, if any. - let { reduce: xReduce } = x; - let { reduce: yReduce } = y; + let {reduce: xReduce} = x; + let {reduce: yReduce} = y; if (xReduce === undefined) - xReduce = - yReduce == null && xValue == null && sizeValue == null && yValue != null - ? "count" - : null; + xReduce = yReduce == null && xValue == null && sizeValue == null && yValue != null ? "count" : null; if (yReduce === undefined) - yReduce = - xReduce == null && yValue == null && sizeValue == null && xValue != null - ? "count" - : null; + yReduce = xReduce == null && yValue == null && sizeValue == null && xValue != null ? "count" : null; - const { zero: xZero } = x; - const { zero: yZero } = y; - const { value: colorValue, reduce: colorReduce } = color; - const { value: fxValue } = fx; - const { value: fyValue } = fy; + const {zero: xZero} = x; + const {zero: yZero} = y; + const {value: colorValue, reduce: colorReduce} = color; + const {value: fxValue} = fx; + const {value: fyValue} = fy; // TODO Default sizeReduce for ordinal/ordinal case? // TODO Allow x: {field: "red"}, too? @@ -94,9 +87,7 @@ export function auto(data, { x, y, fx, fy, color, size, mark } = {}) { : xReduce != null || yReduce != null || colorReduce != null ? "bar" : xValue != null && yValue != null - ? isContinuous(x) && - isContinuous(y) && - (isMonotonic(x) || isMonotonic(y)) + ? isContinuous(x) && isContinuous(y) && (isMonotonic(x) || isMonotonic(y)) ? "line" : (isContinuous(x) && xZero) || (isContinuous(y) && yZero) ? "bar" @@ -178,7 +169,7 @@ export function auto(data, { x, y, fx, fy, color, size, mark } = {}) { } // Determine the mark options. - let options = { x, y, fill, stroke, z, r: size, fx, fy }; + let options = {x, y, fill, stroke, z, r: size, fx, fy}; let transformOptions = { fill: fillReduce, stroke: strokeReduce, @@ -189,12 +180,12 @@ export function auto(data, { x, y, fx, fy, color, size, mark } = {}) { throw new Error(`cannot reduce both x and y`); // for now at least } else if (yReduce != null) { options = isOrdinal(x) - ? groupX({ y: yReduce, ...transformOptions }, options) - : binX({ y: yReduce, ...transformOptions }, options); + ? groupX({y: yReduce, ...transformOptions}, options) + : binX({y: yReduce, ...transformOptions}, options); } else if (xReduce != null) { options = isOrdinal(y) - ? groupY({ x: xReduce, ...transformOptions }, options) - : binY({ x: xReduce, ...transformOptions }, options); + ? groupY({x: xReduce, ...transformOptions}, options) + : binY({x: xReduce, ...transformOptions}, options); } else if (colorReduce != null || sizeReduce != null) { if (isOrdinal(x) && isOrdinal(y)) { options = group(transformOptions, options); @@ -212,10 +203,10 @@ export function auto(data, { x, y, fx, fy, color, size, mark } = {}) { // y: { zero: yZero }, // color: colorValue == null && colorReduce == null ? null : { legend: true }, // marks: [ - fx || fy ? frame({ stroke: "#eee" }) : null, - xZero ? ruleX([0]) : null, - yZero ? ruleY([0]) : null, - mark(data, options) + fx || fy ? frame({stroke: "#eee"}) : null, + xZero ? ruleX([0]) : null, + yZero ? ruleY([0]) : null, + mark(data, options) // ] ); } @@ -230,7 +221,10 @@ function isMonotonic(values) { let previousOrder; for (const value of values) { if (value == null) continue; - if (previous === undefined) { previous = value; continue; } + if (previous === undefined) { + previous = value; + continue; + } const order = Math.sign(ascending(previous, value)); if (!order) continue; // skip zero, NaN if (previousOrder !== undefined && order !== previousOrder) return false; @@ -241,16 +235,12 @@ function isMonotonic(values) { } function makeOptions(value) { - return isReducer(value) ? { reduce: value } : { value }; + return isReducer(value) ? {reduce: value} : {value}; } // https://github.com/observablehq/stdlib/blob/main/src/table.js function arrayIsPrimitive(value) { - return ( - isTypedArray(value) || - arrayContainsPrimitives(value) || - arrayContainsDates(value) - ); + return isTypedArray(value) || arrayContainsPrimitives(value) || arrayContainsDates(value); } // https://github.com/observablehq/stdlib/blob/main/src/table.js @@ -316,25 +306,25 @@ function arrayContainsDates(value) { // https://github.com/observablehq/plot/blob/818562649280e155136f730fc496e0b3d15ae464/src/transforms/group.js#L236 function isReducer(reduce) { - if (typeof reduce?.reduce === "function") return true; - if (/^p\d{2}$/i.test(reduce)) return true; - switch (`${reduce}`.toLowerCase()) { - case "first": - case "last": - case "count": - case "distinct": - case "sum": - case "proportion": - case "proportion-facet": // TODO remove me? - case "deviation": - case "min": - case "min-index": // TODO remove me? - case "max": - case "max-index": // TODO remove me? - case "mean": - case "median": - case "variance": - case "mode": + if (typeof reduce?.reduce === "function") return true; + if (/^p\d{2}$/i.test(reduce)) return true; + switch (`${reduce}`.toLowerCase()) { + case "first": + case "last": + case "count": + case "distinct": + case "sum": + case "proportion": + case "proportion-facet": // TODO remove me? + case "deviation": + case "min": + case "min-index": // TODO remove me? + case "max": + case "max-index": // TODO remove me? + case "mean": + case "median": + case "variance": + case "mode": // These are technically reducers, but I think we’d want to treat them as fields? // case "x": // case "x1": @@ -342,7 +332,7 @@ function isReducer(reduce) { // case "y": // case "y1": // case "y2": - return true; - } - return false; - } \ No newline at end of file + return true; + } + return false; +} From 73f23b0448c1dec2e6e213e1266f9c6330e0dcf3 Mon Sep 17 00:00:00 2001 From: Toph Tucker Date: Thu, 26 Jan 2023 14:37:38 -0800 Subject: [PATCH 04/22] even pRetTIer --- test/plots/autoplot.js | 10 ++++++++-- test/plots/index.js | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/test/plots/autoplot.js b/test/plots/autoplot.js index 37bed54312..3d9c12551a 100644 --- a/test/plots/autoplot.js +++ b/test/plots/autoplot.js @@ -184,11 +184,17 @@ export async function autoDotFacet() { export async function autoDotFacet2() { const penguins = await d3.csv("data/penguins.csv", d3.autoType); - return Plot.auto(penguins, {x: "body_mass_g", y: "culmen_length_mm", fx: "island", fy: "species", color: "sex"}).plot(); + return Plot.auto(penguins, { + x: "body_mass_g", + y: "culmen_length_mm", + fx: "island", + fy: "species", + color: "sex" + }).plot(); } export async function autoShorthandContinuous() { - return Plot.auto([1,1,2,3,5]).plot(); + return Plot.auto([1, 1, 2, 3, 5]).plot(); } export async function autoShorthandOrdinal() { diff --git a/test/plots/index.js b/test/plots/index.js index 04d09a9c86..85d1c19bb7 100644 --- a/test/plots/index.js +++ b/test/plots/index.js @@ -296,4 +296,4 @@ export * from "./raster-penguins.js"; export * from "./raster-vapor.js"; export * from "./raster-walmart.js"; export * from "./volcano.js"; -export * from "./autoplot.js"; \ No newline at end of file +export * from "./autoplot.js"; From 0ecbf0bd9c51ad9ab7ecdd40540bc2f81df16206 Mon Sep 17 00:00:00 2001 From: Toph Tucker Date: Tue, 31 Jan 2023 07:47:06 -0800 Subject: [PATCH 05/22] Nullish checks on sizeValue and sizeReduce Co-authored-by: Mike Bostock --- src/marks/auto.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/marks/auto.js b/src/marks/auto.js index 7dfd89ff5f..fc33a76254 100644 --- a/src/marks/auto.js +++ b/src/marks/auto.js @@ -82,7 +82,7 @@ export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { // Determine the default mark type. if (mark === undefined) { mark = - sizeValue || sizeReduce + sizeValue != null || sizeReduce != null ? "dot" : xReduce != null || yReduce != null || colorReduce != null ? "bar" From 22628b38df636063fa7deedfa47eebde34c041ea Mon Sep 17 00:00:00 2001 From: Toph Tucker Date: Tue, 31 Jan 2023 16:02:44 -0500 Subject: [PATCH 06/22] Facet frame style matches default grid style; more concise transform options --- src/marks/auto.js | 32 +++++++++++--------------------- test/output/autoDotFacet.svg | 6 +++--- test/output/autoDotFacet2.svg | 10 +++++----- test/output/autoLineFacet.svg | 28 ++++++++++++++-------------- 4 files changed, 33 insertions(+), 43 deletions(-) diff --git a/src/marks/auto.js b/src/marks/auto.js index fc33a76254..26d81a244c 100644 --- a/src/marks/auto.js +++ b/src/marks/auto.js @@ -170,6 +170,7 @@ export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { // Determine the mark options. let options = {x, y, fill, stroke, z, r: size, fx, fy}; + let transform; let transformOptions = { fill: fillReduce, stroke: strokeReduce, @@ -179,35 +180,24 @@ export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { if (xReduce != null && yReduce != null) { throw new Error(`cannot reduce both x and y`); // for now at least } else if (yReduce != null) { - options = isOrdinal(x) - ? groupX({y: yReduce, ...transformOptions}, options) - : binX({y: yReduce, ...transformOptions}, options); + transformOptions.y = yReduce; + transform = isOrdinal(x) ? groupX : binX; } else if (xReduce != null) { - options = isOrdinal(y) - ? groupY({x: xReduce, ...transformOptions}, options) - : binY({x: xReduce, ...transformOptions}, options); + transformOptions.x = xReduce; + transform = isOrdinal(y) ? groupY : binY; } else if (colorReduce != null || sizeReduce != null) { - if (isOrdinal(x) && isOrdinal(y)) { - options = group(transformOptions, options); - } else if (!isOrdinal(x) && !isOrdinal(y)) { - options = bin(transformOptions, options); - } else if (isOrdinal(x) && !isOrdinal(y)) { - options = binY(transformOptions, options); // bin y, group x - } else if (!isOrdinal(x) && isOrdinal(y)) { - options = binX(transformOptions, options); // bin x, group y - } + if (isOrdinal(x) && isOrdinal(y)) transform = group; + else if (!isOrdinal(x) && !isOrdinal(y)) transform = bin; + else if (isOrdinal(x) && !isOrdinal(y)) transform = binY; + else if (!isOrdinal(x) && isOrdinal(y)) transform = binX; } + if (transform) options = transform(transformOptions, options); return marks( - // x: { zero: xZero }, - // y: { zero: yZero }, - // color: colorValue == null && colorReduce == null ? null : { legend: true }, - // marks: [ - fx || fy ? frame({stroke: "#eee"}) : null, + fx || fy ? frame({strokeOpacity: 0.1}) : null, xZero ? ruleX([0]) : null, yZero ? ruleY([0]) : null, mark(data, options) - // ] ); } diff --git a/test/output/autoDotFacet.svg b/test/output/autoDotFacet.svg index f4bf2462a9..bad179bd73 100644 --- a/test/output/autoDotFacet.svg +++ b/test/output/autoDotFacet.svg @@ -90,7 +90,7 @@ body_mass_g → - + @@ -262,7 +262,7 @@ - + @@ -391,7 +391,7 @@ - + diff --git a/test/output/autoDotFacet2.svg b/test/output/autoDotFacet2.svg index 94c69add17..d396d607a5 100644 --- a/test/output/autoDotFacet2.svg +++ b/test/output/autoDotFacet2.svg @@ -111,7 +111,7 @@ body_mass_g → - + @@ -160,7 +160,7 @@ - + @@ -288,7 +288,7 @@ - + @@ -349,7 +349,7 @@ - + @@ -422,7 +422,7 @@ - + diff --git a/test/output/autoLineFacet.svg b/test/output/autoLineFacet.svg index b1ad988acc..8d760f6f8b 100644 --- a/test/output/autoLineFacet.svg +++ b/test/output/autoLineFacet.svg @@ -190,85 +190,85 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + From 7126ff61070cd9ee125eccd779fbf458efd86b99 Mon Sep 17 00:00:00 2001 From: Toph Tucker Date: Thu, 2 Feb 2023 19:05:01 -0500 Subject: [PATCH 07/22] isHighCardinality helper --- src/marks/auto.js | 9 +++++---- src/style.js | 8 ++++++-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/marks/auto.js b/src/marks/auto.js index 26d81a244c..670ecf63f0 100644 --- a/src/marks/auto.js +++ b/src/marks/auto.js @@ -1,4 +1,5 @@ import {isOrdinal, labelof, valueof, isOptions} from "../options.js"; +import {isHighCardinality} from "../style.js"; import {area, areaX, areaY} from "./area.js"; import {dot} from "./dot.js"; import {line, lineX, lineY} from "./line.js"; @@ -111,7 +112,7 @@ export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { mark = x && y ? line : x ? lineX : lineY; // 1d line by index stroke = color; strokeReduce = colorReduce; - if (new Set(color).size > color?.length >> 1) { + if (isHighCardinality(color)) { // TODO isHighCardinality(color) // TODO only if z not set by user z = null; @@ -186,9 +187,9 @@ export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { transformOptions.x = xReduce; transform = isOrdinal(y) ? groupY : binY; } else if (colorReduce != null || sizeReduce != null) { - if (isOrdinal(x) && isOrdinal(y)) transform = group; - else if (!isOrdinal(x) && !isOrdinal(y)) transform = bin; - else if (isOrdinal(x) && !isOrdinal(y)) transform = binY; + if (isOrdinal(x) && isOrdinal(y)) transform = group; + else if (!isOrdinal(x) && !isOrdinal(y)) transform = bin; + else if (isOrdinal(x) && !isOrdinal(y)) transform = binY; else if (!isOrdinal(x) && isOrdinal(y)) transform = binX; } if (transform) options = transform(transformOptions, options); diff --git a/src/style.js b/src/style.js index 083c5754ab..e127bd1088 100644 --- a/src/style.js +++ b/src/style.js @@ -1,4 +1,4 @@ -import {geoPath, group, namespaces} from "d3"; +import {geoPath, group, namespaces, InternSet} from "d3"; import {create} from "./context.js"; import {defined, nonempty} from "./defined.js"; import {formatDefault} from "./format.js"; @@ -244,9 +244,13 @@ function groupAesthetics({ return [AL, T, F, FO, S, SO, SW, O, H].filter((c) => c !== undefined); } +export function isHighCardinality(value) { + return new InternSet(value).size > value?.length >> 1; +} + export function groupZ(I, Z, z) { const G = group(I, (i) => Z[i]); - if (z === undefined && G.size > I.length >> 1) { + if (z === undefined && isHighCardinality(I.map((i) => Z[i]))) { warn( `Warning: the implicit z channel has high cardinality. This may occur when the fill or stroke channel is associated with quantitative data rather than ordinal or categorical data. You can suppress this warning by setting the z option explicitly; if this data represents a single series, set z to null.` ); From ec7cd48e9dde05859f8ad877e052998a410d7fcc Mon Sep 17 00:00:00 2001 From: Toph Tucker Date: Thu, 2 Feb 2023 19:16:51 -0500 Subject: [PATCH 08/22] More permissive shorthand --- src/marks/auto.js | 71 +---------------------------------------------- 1 file changed, 1 insertion(+), 70 deletions(-) diff --git a/src/marks/auto.js b/src/marks/auto.js index 670ecf63f0..48693e7ad0 100644 --- a/src/marks/auto.js +++ b/src/marks/auto.js @@ -13,12 +13,9 @@ import {group, groupX, groupY} from "../transforms/group.js"; import {marks} from "../plot.js"; import {ascending} from "d3"; -// https://github.com/observablehq/stdlib/blob/main/src/table.js -const nChecks = 20; // number of values to check in each array - export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { // Shorthand: array of primitives should result in a histogram - if (x === undefined && y === undefined && arrayIsPrimitive(data)) x = (d) => d; + if (x === undefined && y === undefined) x = (d) => d; // Allow x and y and other dimensions to be specified as shorthand // field names (but note that they can also be specified as a @@ -229,72 +226,6 @@ function makeOptions(value) { return isReducer(value) ? {reduce: value} : {value}; } -// https://github.com/observablehq/stdlib/blob/main/src/table.js -function arrayIsPrimitive(value) { - return isTypedArray(value) || arrayContainsPrimitives(value) || arrayContainsDates(value); -} - -// https://github.com/observablehq/stdlib/blob/main/src/table.js -function isTypedArray(value) { - return ( - value instanceof Int8Array || - value instanceof Int16Array || - value instanceof Int32Array || - value instanceof Uint8Array || - value instanceof Uint8ClampedArray || - value instanceof Uint16Array || - value instanceof Uint32Array || - value instanceof Float32Array || - value instanceof Float64Array - ); -} - -// https://github.com/observablehq/stdlib/blob/main/src/table.js -// Given an array, checks that the first n elements are primitives (number, -// string, boolean, bigint) of a consistent type. -function arrayContainsPrimitives(value) { - const n = Math.min(nChecks, value.length); - if (!(n > 0)) return false; - let type; - let hasPrimitive = false; // ensure we encounter 1+ primitives - for (let i = 0; i < n; ++i) { - const v = value[i]; - if (v == null) continue; // ignore null and undefined - const t = typeof v; - if (type === undefined) { - switch (t) { - case "number": - case "boolean": - case "string": - case "bigint": - type = t; - break; - default: - return false; - } - } else if (t !== type) { - return false; - } - hasPrimitive = true; - } - return hasPrimitive; -} - -// https://github.com/observablehq/stdlib/blob/main/src/table.js -// Given an array, checks that the first n elements are dates. -function arrayContainsDates(value) { - const n = Math.min(nChecks, value.length); - if (!(n > 0)) return false; - let hasDate = false; // ensure we encounter 1+ dates - for (let i = 0; i < n; ++i) { - const v = value[i]; - if (v == null) continue; // ignore null and undefined - if (!(v instanceof Date)) return false; - hasDate = true; - } - return hasDate; -} - // https://github.com/observablehq/plot/blob/818562649280e155136f730fc496e0b3d15ae464/src/transforms/group.js#L236 function isReducer(reduce) { if (typeof reduce?.reduce === "function") return true; From fa7a367ccc6423b9d27e71db27464f9336f17299 Mon Sep 17 00:00:00 2001 From: Mike Bostock Date: Thu, 2 Feb 2023 19:15:18 -0800 Subject: [PATCH 09/22] move isHighCardinality; adopt identity --- src/marks/auto.js | 10 +++++++--- src/style.js | 8 ++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/marks/auto.js b/src/marks/auto.js index 48693e7ad0..b20cd4cf72 100644 --- a/src/marks/auto.js +++ b/src/marks/auto.js @@ -1,5 +1,5 @@ -import {isOrdinal, labelof, valueof, isOptions} from "../options.js"; -import {isHighCardinality} from "../style.js"; +import {InternSet} from "d3"; +import {isOrdinal, labelof, valueof, isOptions, identity} from "../options.js"; import {area, areaX, areaY} from "./area.js"; import {dot} from "./dot.js"; import {line, lineX, lineY} from "./line.js"; @@ -15,7 +15,7 @@ import {ascending} from "d3"; export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { // Shorthand: array of primitives should result in a histogram - if (x === undefined && y === undefined) x = (d) => d; + if (x === undefined && y === undefined) x = identity; // Allow x and y and other dimensions to be specified as shorthand // field names (but note that they can also be specified as a @@ -258,3 +258,7 @@ function isReducer(reduce) { } return false; } + +function isHighCardinality(value) { + return new InternSet(value).size > value?.length >> 1; +} diff --git a/src/style.js b/src/style.js index e127bd1088..083c5754ab 100644 --- a/src/style.js +++ b/src/style.js @@ -1,4 +1,4 @@ -import {geoPath, group, namespaces, InternSet} from "d3"; +import {geoPath, group, namespaces} from "d3"; import {create} from "./context.js"; import {defined, nonempty} from "./defined.js"; import {formatDefault} from "./format.js"; @@ -244,13 +244,9 @@ function groupAesthetics({ return [AL, T, F, FO, S, SO, SW, O, H].filter((c) => c !== undefined); } -export function isHighCardinality(value) { - return new InternSet(value).size > value?.length >> 1; -} - export function groupZ(I, Z, z) { const G = group(I, (i) => Z[i]); - if (z === undefined && isHighCardinality(I.map((i) => Z[i]))) { + if (z === undefined && G.size > I.length >> 1) { warn( `Warning: the implicit z channel has high cardinality. This may occur when the fill or stroke channel is associated with quantitative data rather than ordinal or categorical data. You can suppress this warning by setting the z option explicitly; if this data represents a single series, set z to null.` ); From b7926206b6bae5bd29110d0ce40ab6d21eeff855 Mon Sep 17 00:00:00 2001 From: Mike Bostock Date: Thu, 2 Feb 2023 19:18:46 -0800 Subject: [PATCH 10/22] rewrap a few comments --- src/marks/auto.js | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/src/marks/auto.js b/src/marks/auto.js index b20cd4cf72..20034ff510 100644 --- a/src/marks/auto.js +++ b/src/marks/auto.js @@ -17,9 +17,9 @@ export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { // Shorthand: array of primitives should result in a histogram if (x === undefined && y === undefined) x = identity; - // Allow x and y and other dimensions to be specified as shorthand - // field names (but note that they can also be specified as a - // {transform} object such as Plot.identity). + // Allow x and y and other dimensions to be specified as shorthand field names + // (but note that they can also be specified as a {transform} object such as + // Plot.identity). if (!isOptions(x)) x = makeOptions(x); if (!isOptions(y)) y = makeOptions(y); if (!isOptions(fx)) fx = makeOptions(fx); @@ -29,7 +29,6 @@ export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { const {value: xValue} = x; const {value: yValue} = y; - const {value: sizeValue, reduce: sizeReduce} = size; // Determine the default reducer, if any. @@ -56,11 +55,11 @@ export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { // TODO Default to something other than turbo for continuous? Like: // scheme: (colorValue && isContinuous(color)) || colorReduce ? "ylgnbu" : undefined - // To apply heuristics based on the data types (values), realize the - // columns. We could maybe look at the data.schema here, but Plot’s - // behavior depends on the actual values anyway, so this probably is - // what we want. By materializing the columns here, we also ensure - // that they aren’t re-computed later in Plot.plot. + // To apply heuristics based on the data types (values), realize the columns. + // We could maybe look at the data.schema here, but Plot’s behavior depends on + // the actual values anyway, so this probably is what we want. By + // materializing the columns here, we also ensure that they aren’t re-computed + // later in Plot.plot. x = valueof(data, xValue); y = valueof(data, yValue); color = valueof(data, colorValue); @@ -68,7 +67,6 @@ export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { fx = valueof(data, fxValue); // TODO Should we still materialize if heuristic doesn't depend on it? fy = valueof(data, fyValue); - // (Toph) We wanna output to these but don't allow them in API yet let fill, stroke, z, fillReduce, strokeReduce, zReduce; // Propagate the x and y labels (field names), if any. @@ -109,11 +107,7 @@ export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { mark = x && y ? line : x ? lineX : lineY; // 1d line by index stroke = color; strokeReduce = colorReduce; - if (isHighCardinality(color)) { - // TODO isHighCardinality(color) - // TODO only if z not set by user - z = null; - } + if (isHighCardinality(color)) z = null; // TODO only if z not set by user break; case "area": // TODO: throw some errors; I'm not sure we ever want Plot.area; how does it work with ordinal? From d65e83730de6b685c2abe493eefbf471eb47c5dd Mon Sep 17 00:00:00 2001 From: Mike Bostock Date: Thu, 2 Feb 2023 19:35:37 -0800 Subject: [PATCH 11/22] constant-color disambiguation --- src/marks/auto.js | 22 +- test/output/autoAreaColor.svg | 1268 +++++++++++++++++++++ test/output/autoAreaColorColor.svg | 68 ++ test/output/autoAreaColorName.svg | 68 ++ test/output/autoAreaColorValue.svg | 1268 +++++++++++++++++++++ test/output/autoBarStackColorConstant.svg | 94 +- test/plots/autoplot.js | 24 +- 7 files changed, 2752 insertions(+), 60 deletions(-) create mode 100644 test/output/autoAreaColor.svg create mode 100644 test/output/autoAreaColorColor.svg create mode 100644 test/output/autoAreaColorName.svg create mode 100644 test/output/autoAreaColorValue.svg diff --git a/src/marks/auto.js b/src/marks/auto.js index 20034ff510..bed1a3179d 100644 --- a/src/marks/auto.js +++ b/src/marks/auto.js @@ -1,5 +1,5 @@ import {InternSet} from "d3"; -import {isOrdinal, labelof, valueof, isOptions, identity} from "../options.js"; +import {isOrdinal, labelof, valueof, isOptions, identity, isColor} from "../options.js"; import {area, areaX, areaY} from "./area.js"; import {dot} from "./dot.js"; import {line, lineX, lineY} from "./line.js"; @@ -24,7 +24,7 @@ export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { if (!isOptions(y)) y = makeOptions(y); if (!isOptions(fx)) fx = makeOptions(fx); if (!isOptions(fy)) fy = makeOptions(fy); - if (!isOptions(color)) color = makeOptions(color); + if (!isOptions(color)) color = isColor(color) ? {color} : makeOptions(color); if (!isOptions(size)) size = makeOptions(size); const {value: xValue} = x; @@ -41,7 +41,7 @@ export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { const {zero: xZero} = x; const {zero: yZero} = y; - const {value: colorValue, reduce: colorReduce} = color; + const {value: colorValue, reduce: colorReduce, color: colorColor} = color; const {value: fxValue} = fx; const {value: fyValue} = fy; @@ -100,33 +100,33 @@ export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { switch (`${mark}`.toLowerCase()) { case "dot": mark = dot; - stroke = color; + stroke = color ?? colorColor; strokeReduce = colorReduce; break; case "line": mark = x && y ? line : x ? lineX : lineY; // 1d line by index - stroke = color; + stroke = color ?? colorColor; strokeReduce = colorReduce; if (isHighCardinality(color)) z = null; // TODO only if z not set by user break; case "area": - // TODO: throw some errors; I'm not sure we ever want Plot.area; how does it work with ordinal? mark = x && y ? isContinuous(x) && isMonotonic(x) ? areaY : isContinuous(y) && isMonotonic(y) ? areaX - : area + : area // TODO error? how does it work with ordinal? : x ? areaX : areaY; // 1d area by index - fill = color; + fill = color ?? colorColor; fillReduce = colorReduce; + if (isHighCardinality(color)) z = null; // TODO only if z not set by user break; case "rule": mark = x ? ruleX : ruleY; - stroke = color; + stroke = color ?? colorColor; strokeReduce = colorReduce; break; case "bar": @@ -152,7 +152,7 @@ export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { : isOrdinal(y) ? barX : barY; - fill = color; + fill = color ?? colorColor; fillReduce = colorReduce; break; default: @@ -254,5 +254,5 @@ function isReducer(reduce) { } function isHighCardinality(value) { - return new InternSet(value).size > value?.length >> 1; + return value ? new InternSet(value).size > value.length >> 1 : false; } diff --git a/test/output/autoAreaColor.svg b/test/output/autoAreaColor.svg new file mode 100644 index 0000000000..1be50ae792 --- /dev/null +++ b/test/output/autoAreaColor.svg @@ -0,0 +1,1268 @@ + + + + + 0 + + + 20 + + + 40 + + + 60 + + + 80 + + + 100 + + + 120 + + + 140 + + + 160 + + + 180 + ↑ Close + + + + 2014 + + + 2015 + + + 2016 + + + 2017 + + + 2018 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoAreaColorColor.svg b/test/output/autoAreaColorColor.svg new file mode 100644 index 0000000000..365b83b3d3 --- /dev/null +++ b/test/output/autoAreaColorColor.svg @@ -0,0 +1,68 @@ + + + + + 0 + + + 20 + + + 40 + + + 60 + + + 80 + + + 100 + + + 120 + + + 140 + + + 160 + + + 180 + ↑ Close + + + + 2014 + + + 2015 + + + 2016 + + + 2017 + + + 2018 + + + + + + \ No newline at end of file diff --git a/test/output/autoAreaColorName.svg b/test/output/autoAreaColorName.svg new file mode 100644 index 0000000000..365b83b3d3 --- /dev/null +++ b/test/output/autoAreaColorName.svg @@ -0,0 +1,68 @@ + + + + + 0 + + + 20 + + + 40 + + + 60 + + + 80 + + + 100 + + + 120 + + + 140 + + + 160 + + + 180 + ↑ Close + + + + 2014 + + + 2015 + + + 2016 + + + 2017 + + + 2018 + + + + + + \ No newline at end of file diff --git a/test/output/autoAreaColorValue.svg b/test/output/autoAreaColorValue.svg new file mode 100644 index 0000000000..1be50ae792 --- /dev/null +++ b/test/output/autoAreaColorValue.svg @@ -0,0 +1,1268 @@ + + + + + 0 + + + 20 + + + 40 + + + 60 + + + 80 + + + 100 + + + 120 + + + 140 + + + 160 + + + 180 + ↑ Close + + + + 2014 + + + 2015 + + + 2016 + + + 2017 + + + 2018 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoBarStackColorConstant.svg b/test/output/autoBarStackColorConstant.svg index 5f630fdf65..0029e721be 100644 --- a/test/output/autoBarStackColorConstant.svg +++ b/test/output/autoBarStackColorConstant.svg @@ -77,52 +77,52 @@ 2.2 height → - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/plots/autoplot.js b/test/plots/autoplot.js index 3d9c12551a..3cd5ae39ce 100644 --- a/test/plots/autoplot.js +++ b/test/plots/autoplot.js @@ -46,6 +46,26 @@ export async function autoArea() { return Plot.auto(aapl, {x: "Date", y: "Close", mark: "area"}).plot(); } +export async function autoAreaColor() { + const aapl = await d3.csv("data/aapl.csv", d3.autoType); + return Plot.auto(aapl, {x: "Date", y: "Close", color: "Close", mark: "area"}).plot(); +} + +export async function autoAreaColorValue() { + const aapl = await d3.csv("data/aapl.csv", d3.autoType); + return Plot.auto(aapl, {x: "Date", y: "Close", color: {value: "Close"}, mark: "area"}).plot(); +} + +export async function autoAreaColorName() { + const aapl = await d3.csv("data/aapl.csv", d3.autoType); + return Plot.auto(aapl, {x: "Date", y: "Close", color: "red", mark: "area"}).plot(); +} + +export async function autoAreaColorColor() { + const aapl = await d3.csv("data/aapl.csv", d3.autoType); + return Plot.auto(aapl, {x: "Date", y: "Close", color: {color: "red"}, mark: "area"}).plot(); +} + export async function autoDot() { const penguins = await d3.csv("data/penguins.csv", d3.autoType); return Plot.auto(penguins, {x: "culmen_length_mm", y: "body_mass_g"}).plot(); @@ -159,12 +179,12 @@ export async function autoAreaStackColor() { export async function autoBarStackColorField() { const athletes = await d3.csv("data/athletes.csv", d3.autoType); - return Plot.auto(athletes, {x: "height", color: "gold"}).plot(); + return Plot.auto(athletes, {x: "height", color: {value: "gold"}}).plot(); } export async function autoBarStackColorConstant() { const athletes = await d3.csv("data/athletes.csv", d3.autoType); - return Plot.auto(athletes, {x: "height", color: () => "gold"}).plot(); + return Plot.auto(athletes, {x: "height", color: "gold"}).plot(); } export async function autoBarMean() { From 47e2106768c0e285a334791f1669379699044f8c Mon Sep 17 00:00:00 2001 From: Mike Bostock Date: Thu, 2 Feb 2023 19:37:22 -0800 Subject: [PATCH 12/22] remove completed TODO --- src/marks/auto.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/marks/auto.js b/src/marks/auto.js index bed1a3179d..8f2bcfc2e1 100644 --- a/src/marks/auto.js +++ b/src/marks/auto.js @@ -46,11 +46,8 @@ export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { const {value: fyValue} = fy; // TODO Default sizeReduce for ordinal/ordinal case? - // TODO Allow x: {field: "red"}, too? - // TODO We might need maybeColorChannel to detect constant colors? // TODO The line mark will need z? // TODO Limit and sort for bar charts (e.g. alphabet)? - // TODO Support array of primitives with no channels? // TODO Look at Plot warnings and see how many we can prevent // TODO Default to something other than turbo for continuous? Like: // scheme: (colorValue && isContinuous(color)) || colorReduce ? "ylgnbu" : undefined From f188904b4f8d9755b9cc0b13f8a9a33b0a9882f0 Mon Sep 17 00:00:00 2001 From: Mike Bostock Date: Thu, 2 Feb 2023 19:55:20 -0800 Subject: [PATCH 13/22] auto zero; auto z-order for decos --- src/marks/auto.js | 50 +- test/output/autoArea.svg | 3 + test/output/autoAreaColor.svg | 3 + test/output/autoAreaColorColor.svg | 3 + test/output/autoAreaColorName.svg | 3 + test/output/autoAreaColorValue.svg | 3 + test/output/autoAreaStackColor.svg | 3 + test/output/autoBar.svg | 3 + test/output/autoBarColorReducer.svg | 3 + test/output/autoBarColorStack.svg | 63 - test/output/autoBarMean.svg | 3 + test/output/autoBarStackColor.svg | 3 + test/output/autoBarStackColorConstant.svg | 3 + test/output/autoBarStackColorField.svg | 3 + test/output/autoBarZero.svg | 6 +- test/output/autoDotBinned.svg | 120 - test/output/autoDotGrouped.svg | 45 - test/output/autoDotSized1.svg | 1295 --- test/output/autoDotSized2.svg | 403 - test/output/autoDotUnsortedDates.svg | 11290 -------------------- test/output/autoHistogram.svg | 3 + test/output/autoHistogramDate.svg | 3 + test/output/autoHistogramGroup.svg | 3 + test/output/autoHistogramLine.svg | 77 - test/output/autoRectColorReducer.svg | 3 + test/output/autoRectColorStack.svg | 100 - test/output/autoRectStackColor.svg | 3 + test/output/autoShorthandContinuous.svg | 3 + test/output/autoShorthandOrdinal.svg | 3 + 29 files changed, 84 insertions(+), 13422 deletions(-) delete mode 100644 test/output/autoBarColorStack.svg delete mode 100644 test/output/autoDotBinned.svg delete mode 100644 test/output/autoDotGrouped.svg delete mode 100644 test/output/autoDotSized1.svg delete mode 100644 test/output/autoDotSized2.svg delete mode 100644 test/output/autoDotUnsortedDates.svg delete mode 100644 test/output/autoHistogramLine.svg delete mode 100644 test/output/autoRectColorStack.svg diff --git a/src/marks/auto.js b/src/marks/auto.js index 8f2bcfc2e1..ce89e21713 100644 --- a/src/marks/auto.js +++ b/src/marks/auto.js @@ -39,8 +39,8 @@ export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { if (yReduce === undefined) yReduce = xReduce == null && yValue == null && sizeValue == null && xValue != null ? "count" : null; - const {zero: xZero} = x; - const {zero: yZero} = y; + let {zero: xZero} = x; + let {zero: yZero} = y; const {value: colorValue, reduce: colorReduce, color: colorColor} = color; const {value: fxValue} = fx; const {value: fyValue} = fy; @@ -64,7 +64,7 @@ export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { fx = valueof(data, fxValue); // TODO Should we still materialize if heuristic doesn't depend on it? fy = valueof(data, fyValue); - let fill, stroke, z, fillReduce, strokeReduce, zReduce; + let z, zReduce; // Propagate the x and y labels (field names), if any. if (x) x.label = labelof(xValue); @@ -92,18 +92,18 @@ export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { : null; } + let colorMode; // "fill" or "stroke" + // Determine the mark implementation. if (mark != null) { switch (`${mark}`.toLowerCase()) { case "dot": mark = dot; - stroke = color ?? colorColor; - strokeReduce = colorReduce; + colorMode = "stroke"; break; case "line": mark = x && y ? line : x ? lineX : lineY; // 1d line by index - stroke = color ?? colorColor; - strokeReduce = colorReduce; + colorMode = "stroke"; if (isHighCardinality(color)) z = null; // TODO only if z not set by user break; case "area": @@ -117,14 +117,12 @@ export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { : x ? areaX : areaY; // 1d area by index - fill = color ?? colorColor; - fillReduce = colorReduce; + colorMode = "fill"; if (isHighCardinality(color)) z = null; // TODO only if z not set by user break; case "rule": mark = x ? ruleX : ruleY; - stroke = color ?? colorColor; - strokeReduce = colorReduce; + colorMode = "stroke"; break; case "bar": mark = @@ -149,8 +147,7 @@ export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { : isOrdinal(y) ? barX : barY; - fill = color ?? colorColor; - fillReduce = colorReduce; + colorMode = "fill"; break; default: throw new Error(`invalid mark: ${mark}`); @@ -158,14 +155,9 @@ export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { } // Determine the mark options. - let options = {x, y, fill, stroke, z, r: size, fx, fy}; + let options = {x, y, [colorMode]: color ?? colorColor, z, r: size, fx, fy}; let transform; - let transformOptions = { - fill: fillReduce, - stroke: strokeReduce, - z: zReduce, - r: sizeReduce - }; + let transformOptions = {[colorMode]: colorReduce, z: zReduce, r: sizeReduce}; if (xReduce != null && yReduce != null) { throw new Error(`cannot reduce both x and y`); // for now at least } else if (yReduce != null) { @@ -182,12 +174,18 @@ export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { } if (transform) options = transform(transformOptions, options); - return marks( - fx || fy ? frame({strokeOpacity: 0.1}) : null, - xZero ? ruleX([0]) : null, - yZero ? ruleY([0]) : null, - mark(data, options) - ); + // If zero-ness is not specified, default based on whether the resolved mark + // type will include a zero baseline. + if (xZero === undefined) xZero = transform !== binX && (mark === barX || mark === areaX || mark === rectX); + if (yZero === undefined) yZero = transform !== binY && (mark === barY || mark === areaY || mark === rectY); + + // In the case of filled marks (particularly bars and areas) the frame and + // rules should come after the mark; in the case of stroked marks + // (particularly dots and lines) they should come before the mark. + const frames = fx || fy ? frame({strokeOpacity: 0.1}) : null; + const rules = [xZero ? ruleX([0]) : null, yZero ? ruleY([0]) : null]; + mark = mark(data, options); + return colorMode === "stroke" ? marks(frames, rules, mark) : marks(frames, mark, rules); } function isContinuous(values) { diff --git a/test/output/autoArea.svg b/test/output/autoArea.svg index ccb5656256..db13464014 100644 --- a/test/output/autoArea.svg +++ b/test/output/autoArea.svg @@ -65,4 +65,7 @@ + + + \ No newline at end of file diff --git a/test/output/autoAreaColor.svg b/test/output/autoAreaColor.svg index 1be50ae792..fb9cd7cc90 100644 --- a/test/output/autoAreaColor.svg +++ b/test/output/autoAreaColor.svg @@ -1265,4 +1265,7 @@ + + + \ No newline at end of file diff --git a/test/output/autoAreaColorColor.svg b/test/output/autoAreaColorColor.svg index 365b83b3d3..c274256ef4 100644 --- a/test/output/autoAreaColorColor.svg +++ b/test/output/autoAreaColorColor.svg @@ -65,4 +65,7 @@ + + + \ No newline at end of file diff --git a/test/output/autoAreaColorName.svg b/test/output/autoAreaColorName.svg index 365b83b3d3..c274256ef4 100644 --- a/test/output/autoAreaColorName.svg +++ b/test/output/autoAreaColorName.svg @@ -65,4 +65,7 @@ + + + \ No newline at end of file diff --git a/test/output/autoAreaColorValue.svg b/test/output/autoAreaColorValue.svg index 1be50ae792..fb9cd7cc90 100644 --- a/test/output/autoAreaColorValue.svg +++ b/test/output/autoAreaColorValue.svg @@ -1265,4 +1265,7 @@ + + + \ No newline at end of file diff --git a/test/output/autoAreaStackColor.svg b/test/output/autoAreaStackColor.svg index de13e9818a..4c31b6f8a2 100644 --- a/test/output/autoAreaStackColor.svg +++ b/test/output/autoAreaStackColor.svg @@ -90,4 +90,7 @@ + + + \ No newline at end of file diff --git a/test/output/autoBar.svg b/test/output/autoBar.svg index 006c3d6463..f7ee5e64c3 100644 --- a/test/output/autoBar.svg +++ b/test/output/autoBar.svg @@ -144,4 +144,7 @@ + + + \ No newline at end of file diff --git a/test/output/autoBarColorReducer.svg b/test/output/autoBarColorReducer.svg index d862bd6b7d..59ba465125 100644 --- a/test/output/autoBarColorReducer.svg +++ b/test/output/autoBarColorReducer.svg @@ -55,4 +55,7 @@ + + + \ No newline at end of file diff --git a/test/output/autoBarColorStack.svg b/test/output/autoBarColorStack.svg deleted file mode 100644 index 4cee85966e..0000000000 --- a/test/output/autoBarColorStack.svg +++ /dev/null @@ -1,63 +0,0 @@ - - - - - Adelie - - - Chinstrap - - - Gentoo - species - - - - 0 - - - 20 - - - 40 - - - 60 - - - 80 - - - 100 - - - 120 - - - 140 - Frequency → - - - - - - - - - - - - \ No newline at end of file diff --git a/test/output/autoBarMean.svg b/test/output/autoBarMean.svg index 83c99fb2c1..3423685409 100644 --- a/test/output/autoBarMean.svg +++ b/test/output/autoBarMean.svg @@ -89,4 +89,7 @@ + + + \ No newline at end of file diff --git a/test/output/autoBarStackColor.svg b/test/output/autoBarStackColor.svg index 4cee85966e..51e4fa42df 100644 --- a/test/output/autoBarStackColor.svg +++ b/test/output/autoBarStackColor.svg @@ -60,4 +60,7 @@ + + + \ No newline at end of file diff --git a/test/output/autoBarStackColorConstant.svg b/test/output/autoBarStackColorConstant.svg index 0029e721be..7bfc1afd4c 100644 --- a/test/output/autoBarStackColorConstant.svg +++ b/test/output/autoBarStackColorConstant.svg @@ -125,4 +125,7 @@ + + + \ No newline at end of file diff --git a/test/output/autoBarStackColorField.svg b/test/output/autoBarStackColorField.svg index c28df57b45..a607ad1374 100644 --- a/test/output/autoBarStackColorField.svg +++ b/test/output/autoBarStackColorField.svg @@ -180,4 +180,7 @@ + + + \ No newline at end of file diff --git a/test/output/autoBarZero.svg b/test/output/autoBarZero.svg index 98d0194736..f7ee5e64c3 100644 --- a/test/output/autoBarZero.svg +++ b/test/output/autoBarZero.svg @@ -116,9 +116,6 @@ 0.12 frequency → - - - @@ -147,4 +144,7 @@ + + + \ No newline at end of file diff --git a/test/output/autoDotBinned.svg b/test/output/autoDotBinned.svg deleted file mode 100644 index aab0f99744..0000000000 --- a/test/output/autoDotBinned.svg +++ /dev/null @@ -1,120 +0,0 @@ - - - - - 3,000 - - - 3,500 - - - 4,000 - - - 4,500 - - - 5,000 - - - 5,500 - - - 6,000 - ↑ body_mass_g - - - - 35 - - - 40 - - - 45 - - - 50 - - - 55 - culmen_length_mm → - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/test/output/autoDotGrouped.svg b/test/output/autoDotGrouped.svg deleted file mode 100644 index b4f2a0338c..0000000000 --- a/test/output/autoDotGrouped.svg +++ /dev/null @@ -1,45 +0,0 @@ - - - - - Adelie - - - Chinstrap - - - Gentoo - species - - - - Biscoe - - - Dream - - - Torgersen - island - - - - - - - - - \ No newline at end of file diff --git a/test/output/autoDotSized1.svg b/test/output/autoDotSized1.svg deleted file mode 100644 index 8dbcfea5ba..0000000000 --- a/test/output/autoDotSized1.svg +++ /dev/null @@ -1,1295 +0,0 @@ - - - - - 2014 - - - 2015 - - - 2016 - - - 2017 - - - 2018 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/test/output/autoDotSized2.svg b/test/output/autoDotSized2.svg deleted file mode 100644 index 932f40337e..0000000000 --- a/test/output/autoDotSized2.svg +++ /dev/null @@ -1,403 +0,0 @@ - - - - - 14 - - - 15 - - - 16 - - - 17 - - - 18 - - - 19 - - - 20 - - - 21 - ↑ culmen_depth_mm - - - - 35 - - - 40 - - - 45 - - - 50 - - - 55 - culmen_length_mm → - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/test/output/autoDotUnsortedDates.svg b/test/output/autoDotUnsortedDates.svg deleted file mode 100644 index 535075c4eb..0000000000 --- a/test/output/autoDotUnsortedDates.svg +++ /dev/null @@ -1,11290 +0,0 @@ - - - - - 1.3 - - - 1.4 - - - 1.5 - - - 1.6 - - - 1.7 - - - 1.8 - - - 1.9 - - - 2.0 - - - 2.1 - - - 2.2 - ↑ height - - - - 1955 - - - 1960 - - - 1965 - - - 1970 - - - 1975 - - - 1980 - - - 1985 - - - 1990 - - - 1995 - - - 2000 - date_of_birth → - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/test/output/autoHistogram.svg b/test/output/autoHistogram.svg index d9fd82fdfb..37327a1507 100644 --- a/test/output/autoHistogram.svg +++ b/test/output/autoHistogram.svg @@ -148,4 +148,7 @@ + + + \ No newline at end of file diff --git a/test/output/autoHistogramDate.svg b/test/output/autoHistogramDate.svg index 30181c9659..5f49a31d9a 100644 --- a/test/output/autoHistogramDate.svg +++ b/test/output/autoHistogramDate.svg @@ -128,4 +128,7 @@ + + + \ No newline at end of file diff --git a/test/output/autoHistogramGroup.svg b/test/output/autoHistogramGroup.svg index f909117152..3e5df97a4b 100644 --- a/test/output/autoHistogramGroup.svg +++ b/test/output/autoHistogramGroup.svg @@ -58,4 +58,7 @@ + + + \ No newline at end of file diff --git a/test/output/autoHistogramLine.svg b/test/output/autoHistogramLine.svg deleted file mode 100644 index 24e1b5a691..0000000000 --- a/test/output/autoHistogramLine.svg +++ /dev/null @@ -1,77 +0,0 @@ - - - - - 20 - - - 40 - - - 60 - - - 80 - - - 100 - - - 120 - - - 140 - - - 160 - - - 180 - - - 200 - - - 220 - - - 240 - - - 260 - ↑ Frequency - - - - 50,000,000 - - - 100,000,000 - - - 150,000,000 - - - 200,000,000 - - - 250,000,000 - Volume → - - - - - \ No newline at end of file diff --git a/test/output/autoRectColorReducer.svg b/test/output/autoRectColorReducer.svg index ecf775e663..2cd8e36abb 100644 --- a/test/output/autoRectColorReducer.svg +++ b/test/output/autoRectColorReducer.svg @@ -77,4 +77,7 @@ + + + \ No newline at end of file diff --git a/test/output/autoRectColorStack.svg b/test/output/autoRectColorStack.svg deleted file mode 100644 index 48bcb198ee..0000000000 --- a/test/output/autoRectColorStack.svg +++ /dev/null @@ -1,100 +0,0 @@ - - - - - 0 - - - 5 - - - 10 - - - 15 - - - 20 - - - 25 - - - 30 - - - 35 - - - 40 - ↑ Frequency - - - - 35 - - - 40 - - - 45 - - - 50 - - - 55 - - - 60 - culmen_length_mm → - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/test/output/autoRectStackColor.svg b/test/output/autoRectStackColor.svg index 48bcb198ee..13cb082264 100644 --- a/test/output/autoRectStackColor.svg +++ b/test/output/autoRectStackColor.svg @@ -97,4 +97,7 @@ + + + \ No newline at end of file diff --git a/test/output/autoShorthandContinuous.svg b/test/output/autoShorthandContinuous.svg index d82f67410c..e786cb43a5 100644 --- a/test/output/autoShorthandContinuous.svg +++ b/test/output/autoShorthandContinuous.svg @@ -76,4 +76,7 @@ + + + \ No newline at end of file diff --git a/test/output/autoShorthandOrdinal.svg b/test/output/autoShorthandOrdinal.svg index 4a2126d44c..f74c94b337 100644 --- a/test/output/autoShorthandOrdinal.svg +++ b/test/output/autoShorthandOrdinal.svg @@ -79,4 +79,7 @@ + + + \ No newline at end of file From d072fadbb9f53be902f5915b68f99b42b4a0bdfe Mon Sep 17 00:00:00 2001 From: Mike Bostock Date: Thu, 2 Feb 2023 19:57:25 -0800 Subject: [PATCH 14/22] sort exports --- test/plots/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/plots/index.js b/test/plots/index.js index 85d1c19bb7..dafea94656 100644 --- a/test/plots/index.js +++ b/test/plots/index.js @@ -280,6 +280,7 @@ export * from "./aapl-bollinger.js"; export * from "./aapl-close.js"; export * from "./aapl-fancy-axis.js"; export * from "./athletes-sample.js"; +export * from "./autoplot.js"; export * from "./axis-labels.js"; export * from "./bin-1m.js"; export * from "./electricity-demand.js"; @@ -296,4 +297,3 @@ export * from "./raster-penguins.js"; export * from "./raster-vapor.js"; export * from "./raster-walmart.js"; export * from "./volcano.js"; -export * from "./autoplot.js"; From 00d8edbf5ecffcd529fc1383420a5a54d4a72af1 Mon Sep 17 00:00:00 2001 From: Toph Tucker Date: Thu, 2 Feb 2023 23:27:38 -0500 Subject: [PATCH 15/22] Fixing marks import; regenerating tests --- src/marks/auto.js | 2 +- test/output/autoArea.svg | 86 +- test/output/autoAreaColor.svg | 86 +- test/output/autoAreaColorColor.svg | 86 +- test/output/autoAreaColorName.svg | 86 +- test/output/autoAreaColorValue.svg | 86 +- test/output/autoAreaStackColor.svg | 106 +-- test/output/autoBar.svg | 179 ++-- test/output/autoBarColorReducer.svg | 71 +- test/output/autoBarMean.svg | 101 +- test/output/autoBarStackColor.svg | 69 +- test/output/autoBarStackColorConstant.svg | 114 +-- test/output/autoBarStackColorField.svg | 114 +-- test/output/autoBarZero.svg | 179 ++-- test/output/autoConnectedScatterplot.svg | 99 +- test/output/autoDot.svg | 74 +- test/output/autoDotBin.svg | 74 +- test/output/autoDotColor.svg | 94 +- test/output/autoDotFacet.svg | 819 ++++++++-------- test/output/autoDotFacet2.svg | 885 ++++++++--------- test/output/autoDotGroup.svg | 44 +- test/output/autoDotOrdCont.svg | 54 +- test/output/autoDotOrdinal.svg | 1059 +++++++++------------ test/output/autoDotSize.svg | 29 +- test/output/autoDotSize2.svg | 79 +- test/output/autoDotUnsortedDate.svg | 114 +-- test/output/autoHeatmap.svg | 89 +- test/output/autoHeatmapOrdCont.svg | 59 +- test/output/autoHeatmapOrdinal.svg | 44 +- test/output/autoHistogram.svg | 114 +-- test/output/autoHistogramDate.svg | 114 +-- test/output/autoHistogramGroup.svg | 74 +- test/output/autoLine.svg | 106 +-- test/output/autoLineColor.svg | 106 +-- test/output/autoLineColorSeries.svg | 126 ++- test/output/autoLineFacet.svg | 377 ++++---- test/output/autoLineHistogram.svg | 104 +- test/output/autoRectColorReducer.svg | 89 +- test/output/autoRectStackColor.svg | 89 +- test/output/autoShorthandContinuous.svg | 101 +- test/output/autoShorthandOrdinal.svg | 106 +-- test/output/autoTickContinuous.svg | 32 +- test/output/autoTickDate.svg | 57 +- test/output/autoTickOrdinal.svg | 22 +- 44 files changed, 3076 insertions(+), 3522 deletions(-) diff --git a/src/marks/auto.js b/src/marks/auto.js index ce89e21713..c281418a22 100644 --- a/src/marks/auto.js +++ b/src/marks/auto.js @@ -10,7 +10,7 @@ import {cell} from "./cell.js"; import {frame} from "./frame.js"; import {bin, binX, binY} from "../transforms/bin.js"; import {group, groupX, groupY} from "../transforms/group.js"; -import {marks} from "../plot.js"; +import {marks} from "../mark.js"; import {ascending} from "d3"; export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { diff --git a/test/output/autoArea.svg b/test/output/autoArea.svg index db13464014..63fed34fda 100644 --- a/test/output/autoArea.svg +++ b/test/output/autoArea.svg @@ -13,54 +13,46 @@ white-space: pre; } - - - 0 - - - 20 - - - 40 - - - 60 - - - 80 - - - 100 - - - 120 - - - 140 - - - 160 - - - 180 - ↑ Close + + + + + + + + + + + - - - 2014 - - - 2015 - - - 2016 - - - 2017 - - - 2018 - + + 0 + 20 + 40 + 60 + 80 + 100 + 120 + 140 + 160 + 180 + + + ↑ Close + + + + + + + + + + 2014 + 2015 + 2016 + 2017 + 2018 diff --git a/test/output/autoAreaColor.svg b/test/output/autoAreaColor.svg index fb9cd7cc90..37c9fdb8ad 100644 --- a/test/output/autoAreaColor.svg +++ b/test/output/autoAreaColor.svg @@ -13,54 +13,46 @@ white-space: pre; } - - - 0 - - - 20 - - - 40 - - - 60 - - - 80 - - - 100 - - - 120 - - - 140 - - - 160 - - - 180 - ↑ Close + + + + + + + + + + + - - - 2014 - - - 2015 - - - 2016 - - - 2017 - - - 2018 - + + 0 + 20 + 40 + 60 + 80 + 100 + 120 + 140 + 160 + 180 + + + ↑ Close + + + + + + + + + + 2014 + 2015 + 2016 + 2017 + 2018 diff --git a/test/output/autoAreaColorColor.svg b/test/output/autoAreaColorColor.svg index c274256ef4..1449edd015 100644 --- a/test/output/autoAreaColorColor.svg +++ b/test/output/autoAreaColorColor.svg @@ -13,54 +13,46 @@ white-space: pre; } - - - 0 - - - 20 - - - 40 - - - 60 - - - 80 - - - 100 - - - 120 - - - 140 - - - 160 - - - 180 - ↑ Close + + + + + + + + + + + - - - 2014 - - - 2015 - - - 2016 - - - 2017 - - - 2018 - + + 0 + 20 + 40 + 60 + 80 + 100 + 120 + 140 + 160 + 180 + + + ↑ Close + + + + + + + + + + 2014 + 2015 + 2016 + 2017 + 2018 diff --git a/test/output/autoAreaColorName.svg b/test/output/autoAreaColorName.svg index c274256ef4..1449edd015 100644 --- a/test/output/autoAreaColorName.svg +++ b/test/output/autoAreaColorName.svg @@ -13,54 +13,46 @@ white-space: pre; } - - - 0 - - - 20 - - - 40 - - - 60 - - - 80 - - - 100 - - - 120 - - - 140 - - - 160 - - - 180 - ↑ Close + + + + + + + + + + + - - - 2014 - - - 2015 - - - 2016 - - - 2017 - - - 2018 - + + 0 + 20 + 40 + 60 + 80 + 100 + 120 + 140 + 160 + 180 + + + ↑ Close + + + + + + + + + + 2014 + 2015 + 2016 + 2017 + 2018 diff --git a/test/output/autoAreaColorValue.svg b/test/output/autoAreaColorValue.svg index fb9cd7cc90..37c9fdb8ad 100644 --- a/test/output/autoAreaColorValue.svg +++ b/test/output/autoAreaColorValue.svg @@ -13,54 +13,46 @@ white-space: pre; } - - - 0 - - - 20 - - - 40 - - - 60 - - - 80 - - - 100 - - - 120 - - - 140 - - - 160 - - - 180 - ↑ Close + + + + + + + + + + + - - - 2014 - - - 2015 - - - 2016 - - - 2017 - - - 2018 - + + 0 + 20 + 40 + 60 + 80 + 100 + 120 + 140 + 160 + 180 + + + ↑ Close + + + + + + + + + + 2014 + 2015 + 2016 + 2017 + 2018 diff --git a/test/output/autoAreaStackColor.svg b/test/output/autoAreaStackColor.svg index 4c31b6f8a2..00d52c1760 100644 --- a/test/output/autoAreaStackColor.svg +++ b/test/output/autoAreaStackColor.svg @@ -13,66 +13,54 @@ white-space: pre; } - - - 0 - - - 2,000 - - - 4,000 - - - 6,000 - - - 8,000 - - - 10,000 - - - 12,000 - - - 14,000 - ↑ unemployed + + + + + + + + + - - - 2000 - - - 2001 - - - 2002 - - - 2003 - - - 2004 - - - 2005 - - - 2006 - - - 2007 - - - 2008 - - - 2009 - - - 2010 - + + 0 + 2,000 + 4,000 + 6,000 + 8,000 + 10,000 + 12,000 + 14,000 + + + ↑ unemployed + + + + + + + + + + + + + + + + 2000 + 2001 + 2002 + 2003 + 2004 + 2005 + 2006 + 2007 + 2008 + 2009 + 2010 diff --git a/test/output/autoBar.svg b/test/output/autoBar.svg index f7ee5e64c3..5b63abcdf7 100644 --- a/test/output/autoBar.svg +++ b/test/output/autoBar.svg @@ -13,108 +13,85 @@ white-space: pre; } - - - A - - - B - - - C - - - D - - - E - - - F - - - G - - - H - - - I - - - J - - - K - - - L - - - M - - - N - - - O - - - P - - - Q - - - R - - - S - - - T - - - U - - - V - - - W - - - X - - - Y - - - Z - letter + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - 0.00 - - - 0.02 - - - 0.04 - - - 0.06 - - - 0.08 - - - 0.10 - - - 0.12 - frequency → + + A + B + C + D + E + F + G + H + I + J + K + L + M + N + O + P + Q + R + S + T + U + V + W + X + Y + Z + + + letter + + + + + + + + + + + + 0.00 + 0.02 + 0.04 + 0.06 + 0.08 + 0.10 + 0.12 + + + frequency → diff --git a/test/output/autoBarColorReducer.svg b/test/output/autoBarColorReducer.svg index 59ba465125..1b4910f87d 100644 --- a/test/output/autoBarColorReducer.svg +++ b/test/output/autoBarColorReducer.svg @@ -13,42 +13,41 @@ white-space: pre; } - - - Adelie - - - Chinstrap - - - Gentoo - species - - - - 0 - - - 20 - - - 40 - - - 60 - - - 80 - - - 100 - - - 120 - - - 140 - Frequency → + + + + + + + Adelie + Chinstrap + Gentoo + + + species + + + + + + + + + + + + + 0 + 20 + 40 + 60 + 80 + 100 + 120 + 140 + + + Frequency → diff --git a/test/output/autoBarMean.svg b/test/output/autoBarMean.svg index 3423685409..5e4b404754 100644 --- a/test/output/autoBarMean.svg +++ b/test/output/autoBarMean.svg @@ -13,63 +13,52 @@ white-space: pre; } - - - 0 - - - 2 - - - 4 - - - 6 - - - 8 - - - 10 - - - 12 - - - 14 - - - 16 - - - 18 - - - 20 - - - 22 - - - 24 - ↑ temp_max + + + + + + + + + + + + + + - - - 2012 - - - 2013 - - - 2014 - - - 2015 - - - 2016 - + + 0 + 2 + 4 + 6 + 8 + 10 + 12 + 14 + 16 + 18 + 20 + 22 + 24 + + + ↑ temp_max + + + + + + + + + + 2012 + 2013 + 2014 + 2015 + 2016 diff --git a/test/output/autoBarStackColor.svg b/test/output/autoBarStackColor.svg index 51e4fa42df..df2f1eb4a6 100644 --- a/test/output/autoBarStackColor.svg +++ b/test/output/autoBarStackColor.svg @@ -13,42 +13,41 @@ white-space: pre; } - - - Adelie - - - Chinstrap - - - Gentoo - species + + + + - - - 0 - - - 20 - - - 40 - - - 60 - - - 80 - - - 100 - - - 120 - - - 140 - Frequency → + + Adelie + Chinstrap + Gentoo + + + species + + + + + + + + + + + + + 0 + 20 + 40 + 60 + 80 + 100 + 120 + 140 + + + Frequency → diff --git a/test/output/autoBarStackColorConstant.svg b/test/output/autoBarStackColorConstant.svg index 7bfc1afd4c..1fc853443c 100644 --- a/test/output/autoBarStackColorConstant.svg +++ b/test/output/autoBarStackColorConstant.svg @@ -13,69 +13,59 @@ white-space: pre; } - - - 0 - - - 100 - - - 200 - - - 300 - - - 400 - - - 500 - - - 600 - - - 700 - - - 800 - ↑ Frequency + + + + + + + + + + - - - 1.2 - - - 1.3 - - - 1.4 - - - 1.5 - - - 1.6 - - - 1.7 - - - 1.8 - - - 1.9 - - - 2.0 - - - 2.1 - - - 2.2 - height → + + 0 + 100 + 200 + 300 + 400 + 500 + 600 + 700 + 800 + + + ↑ Frequency + + + + + + + + + + + + + + + + 1.2 + 1.3 + 1.4 + 1.5 + 1.6 + 1.7 + 1.8 + 1.9 + 2.0 + 2.1 + 2.2 + + + height → diff --git a/test/output/autoBarStackColorField.svg b/test/output/autoBarStackColorField.svg index a607ad1374..67cdff8c21 100644 --- a/test/output/autoBarStackColorField.svg +++ b/test/output/autoBarStackColorField.svg @@ -13,69 +13,59 @@ white-space: pre; } - - - 0 - - - 100 - - - 200 - - - 300 - - - 400 - - - 500 - - - 600 - - - 700 - - - 800 - ↑ Frequency + + + + + + + + + + - - - 1.2 - - - 1.3 - - - 1.4 - - - 1.5 - - - 1.6 - - - 1.7 - - - 1.8 - - - 1.9 - - - 2.0 - - - 2.1 - - - 2.2 - height → + + 0 + 100 + 200 + 300 + 400 + 500 + 600 + 700 + 800 + + + ↑ Frequency + + + + + + + + + + + + + + + + 1.2 + 1.3 + 1.4 + 1.5 + 1.6 + 1.7 + 1.8 + 1.9 + 2.0 + 2.1 + 2.2 + + + height → diff --git a/test/output/autoBarZero.svg b/test/output/autoBarZero.svg index f7ee5e64c3..5b63abcdf7 100644 --- a/test/output/autoBarZero.svg +++ b/test/output/autoBarZero.svg @@ -13,108 +13,85 @@ white-space: pre; } - - - A - - - B - - - C - - - D - - - E - - - F - - - G - - - H - - - I - - - J - - - K - - - L - - - M - - - N - - - O - - - P - - - Q - - - R - - - S - - - T - - - U - - - V - - - W - - - X - - - Y - - - Z - letter + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - 0.00 - - - 0.02 - - - 0.04 - - - 0.06 - - - 0.08 - - - 0.10 - - - 0.12 - frequency → + + A + B + C + D + E + F + G + H + I + J + K + L + M + N + O + P + Q + R + S + T + U + V + W + X + Y + Z + + + letter + + + + + + + + + + + + 0.00 + 0.02 + 0.04 + 0.06 + 0.08 + 0.10 + 0.12 + + + frequency → diff --git a/test/output/autoConnectedScatterplot.svg b/test/output/autoConnectedScatterplot.svg index bbda6ac1a5..5e2d20ead6 100644 --- a/test/output/autoConnectedScatterplot.svg +++ b/test/output/autoConnectedScatterplot.svg @@ -13,60 +13,53 @@ white-space: pre; } - - - 1.4 - - - 1.6 - - - 1.8 - - - 2.0 - - - 2.2 - - - 2.4 - - - 2.6 - - - 2.8 - - - 3.0 - - - 3.2 - ↑ gas + + + + + + + + + + + - - - 4,000 - - - 5,000 - - - 6,000 - - - 7,000 - - - 8,000 - - - 9,000 - - - 10,000 - miles → + + 1.4 + 1.6 + 1.8 + 2.0 + 2.2 + 2.4 + 2.6 + 2.8 + 3.0 + 3.2 + + + ↑ gas + + + + + + + + + + + + 4,000 + 5,000 + 6,000 + 7,000 + 8,000 + 9,000 + 10,000 + + + miles → diff --git a/test/output/autoDot.svg b/test/output/autoDot.svg index 338aee05df..13d72dd5cc 100644 --- a/test/output/autoDot.svg +++ b/test/output/autoDot.svg @@ -13,45 +13,43 @@ white-space: pre; } - - - 3,000 - - - 3,500 - - - 4,000 - - - 4,500 - - - 5,000 - - - 5,500 - - - 6,000 - ↑ body_mass_g + + + + + + + + - - - 35 - - - 40 - - - 45 - - - 50 - - - 55 - culmen_length_mm → + + 3,000 + 3,500 + 4,000 + 4,500 + 5,000 + 5,500 + 6,000 + + + ↑ body_mass_g + + + + + + + + + + 35 + 40 + 45 + 50 + 55 + + + culmen_length_mm → diff --git a/test/output/autoDotBin.svg b/test/output/autoDotBin.svg index aab0f99744..64d3718ce3 100644 --- a/test/output/autoDotBin.svg +++ b/test/output/autoDotBin.svg @@ -13,45 +13,43 @@ white-space: pre; } - - - 3,000 - - - 3,500 - - - 4,000 - - - 4,500 - - - 5,000 - - - 5,500 - - - 6,000 - ↑ body_mass_g + + + + + + + + - - - 35 - - - 40 - - - 45 - - - 50 - - - 55 - culmen_length_mm → + + 3,000 + 3,500 + 4,000 + 4,500 + 5,000 + 5,500 + 6,000 + + + ↑ body_mass_g + + + + + + + + + + 35 + 40 + 45 + 50 + 55 + + + culmen_length_mm → diff --git a/test/output/autoDotColor.svg b/test/output/autoDotColor.svg index 0c23068232..d0192b551b 100644 --- a/test/output/autoDotColor.svg +++ b/test/output/autoDotColor.svg @@ -13,57 +13,51 @@ white-space: pre; } - - - 2,000 - - - 2,500 - - - 3,000 - - - 3,500 - - - 4,000 - - - 4,500 - - - 5,000 - ↑ weight (lb) + + + + + + + + - - - 60 - - - 80 - - - 100 - - - 120 - - - 140 - - - 160 - - - 180 - - - 200 - - - 220 - power (hp) → + + 2,000 + 2,500 + 3,000 + 3,500 + 4,000 + 4,500 + 5,000 + + + ↑ weight (lb) + + + + + + + + + + + + + + 60 + 80 + 100 + 120 + 140 + 160 + 180 + 200 + 220 + + + power (hp) → diff --git a/test/output/autoDotFacet.svg b/test/output/autoDotFacet.svg index bad179bd73..6ea8386d43 100644 --- a/test/output/autoDotFacet.svg +++ b/test/output/autoDotFacet.svg @@ -13,437 +13,430 @@ white-space: pre; } - - - 34 + + + Biscoe - - 36 + + + + + + + + + + + + + + - - 38 + + 34 + 36 + 38 + 40 + 42 + 44 + 46 + 48 + 50 + 52 + 54 + 56 + 58 - - 40 + + + - - 42 + + 4,000 + 6,000 - - 44 - - - 46 - - - 48 - - - 50 - - - 52 - - - 54 - - - 56 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - 58 - ↑ culmen_length_mm - - - Biscoe + + + Dream - - Dream + + + - - Torgersen + + 4,000 + 6,000 - - - - 4,000 - - - 6,000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - 4,000 + + + Torgersen - - 6,000 + + + - - - - 4,000 + + 4,000 + 6,000 - - 6,000 - body_mass_g → - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + ↑ culmen_length_mm - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + body_mass_g → \ No newline at end of file diff --git a/test/output/autoDotFacet2.svg b/test/output/autoDotFacet2.svg index d396d607a5..b1758b1983 100644 --- a/test/output/autoDotFacet2.svg +++ b/test/output/autoDotFacet2.svg @@ -13,468 +13,495 @@ white-space: pre; } - - - Adelie + + + Biscoe - - Chinstrap + + + + + + - - Gentoo + + 35 + 40 + 45 + 50 + 55 - - - - Biscoe + + + - - Dream + + 4,000 + 6,000 - - Torgersen + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - 35 + + + + + + + + + + 35 + 40 + 45 + 50 + 55 - - 40 + + + - - 45 + + 4,000 + 6,000 - - 50 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - 55 - ↑ culmen_length_mm - - - 35 + + + Dream - - 40 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - 45 + + + + + + + + - - 50 + + 35 + 40 + 45 + 50 + 55 - - 55 + + + - - - - 35 + + 4,000 + 6,000 - - 40 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - 45 + + + + Adelie - - 50 + + Torgersen - - 55 + + + - - - - 4,000 + + 4,000 + 6,000 - - 6,000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - 4,000 + + + Chinstrap - - 6,000 + + + - - - - 4,000 + + 4,000 + 6,000 - - 6,000 - body_mass_g → - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + Gentoo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + 35 + 40 + 45 + 50 + 55 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + ↑ culmen_length_mm - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + body_mass_g → \ No newline at end of file diff --git a/test/output/autoDotGroup.svg b/test/output/autoDotGroup.svg index b4f2a0338c..6d310000bc 100644 --- a/test/output/autoDotGroup.svg +++ b/test/output/autoDotGroup.svg @@ -13,27 +13,31 @@ white-space: pre; } - - - Adelie - - - Chinstrap - - - Gentoo - species + + + + - - - Biscoe - - - Dream - - - Torgersen - island + + Adelie + Chinstrap + Gentoo + + + species + + + + + + + + Biscoe + Dream + Torgersen + + + island diff --git a/test/output/autoDotOrdCont.svg b/test/output/autoDotOrdCont.svg index 9b22b041ed..b8d95236c8 100644 --- a/test/output/autoDotOrdCont.svg +++ b/test/output/autoDotOrdCont.svg @@ -13,33 +13,35 @@ white-space: pre; } - - - Adelie - - - Chinstrap - - - Gentoo - species + + + + - - - 35 - - - 40 - - - 45 - - - 50 - - - 55 - culmen_length_mm → + + Adelie + Chinstrap + Gentoo + + + species + + + + + + + + + + 35 + 40 + 45 + 50 + 55 + + + culmen_length_mm → diff --git a/test/output/autoDotOrdinal.svg b/test/output/autoDotOrdinal.svg index 0603d3cd36..9deb9c44cc 100644 --- a/test/output/autoDotOrdinal.svg +++ b/test/output/autoDotOrdinal.svg @@ -13,636 +13,437 @@ white-space: pre; } - - - AFG - - - ALB - - - ALG - - - AND - - - ANG - - - ANT - - - ARG - - - ARM - - - ARU - - - ASA - - - AUS - - - AUT - - - AZE - - - BAH - - - BAN - - - BAR - - - BDI - - - BEL - - - BEN - - - BER - - - BHU - - - BIH - - - BIZ - - - BLR - - - BOL - - - BOT - - - BRA - - - BRN - - - BRU - - - BUL - - - BUR - - - CAF - - - CAM - - - CAN - - - CAY - - - CGO - - - CHA - - - CHI - - - CHN - - - CIV - - - CMR - - - COD - - - COK - - - COL - - - COM - - - CPV - - - CRC - - - CRO - - - CUB - - - CYP - - - CZE - - - DEN - - - DJI - - - DMA - - - DOM - - - ECU - - - EGY - - - ERI - - - ESA - - - ESP - - - EST - - - ETH - - - FIJ - - - FIN - - - FRA - - - FSM - - - GAB - - - GAM - - - GBR - - - GBS - - - GEO - - - GEQ - - - GER - - - GHA - - - GRE - - - GRN - - - GUA - - - GUI - - - GUM - - - GUY - - - HAI - - - HKG - - - HON - - - HUN - - - INA - - - IND - - - IOA - - - IRI - - - IRL - - - IRQ - - - ISL - - - ISR - - - ISV - - - ITA - - - IVB - - - JAM - - - JOR - - - JPN - - - KAZ - - - KEN - - - KGZ - - - KIR - - - KOR - - - KOS - - - KSA - - - LAO - - - LAT - - - LBA - - - LBR - - - LCA - - - LES - - - LIB - - - LIE - - - LTU - - - LUX - - - MAD - - - MAR - - - MAS - - - MAW - - - MDA - - - MDV - - - MEX - - - MGL - - - MHL - - - MKD - - - MLI - - - MLT - - - MNE - - - MON - - - MOZ - - - MRI - - - MTN - - - MYA - - - NAM - - - NCA - - - NED - - - NEP - - - NGR - - - NIG - - - NOR - - - NRU - - - NZL - - - OMA - - - PAK - - - PAN - - - PAR - - - PER - - - PHI - - - PLE - - - PLW - - - PNG - - - POL - - - POR - - - PRK - - - PUR - - - QAT - - - ROT - - - ROU - - - RSA - - - RUS - - - RWA - - - SAM - - - SEN - - - SEY - - - SIN - - - SKN - - - SLE - - - SLO - - - SMR - - - SOL - - - SOM - - - SRB - - - SRI - - - SSD - - - STP - - - SUD - - - SUI - - - SUR - - - SVK - - - SWE - - - SWZ - - - SYR - - - TAN - - - TGA - - - THA - - - TJK - - - TKM - - - TLS - - - TOG - - - TPE - - - TTO - - - TUN - - - TUR - - - TUV - - - UAE - - - UGA - - - UKR - - - URU - - - USA - - - UZB - - - VAN - - - VEN - - - VIE - - - VIN - - - YEM - - - ZAM - - - ZIM - nationality + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - female - - - male - sex + + AFG + ALB + ALG + AND + ANG + ANT + ARG + ARM + ARU + ASA + AUS + AUT + AZE + BAH + BAN + BAR + BDI + BEL + BEN + BER + BHU + BIH + BIZ + BLR + BOL + BOT + BRA + BRN + BRU + BUL + BUR + CAF + CAM + CAN + CAY + CGO + CHA + CHI + CHN + CIV + CMR + COD + COK + COL + COM + CPV + CRC + CRO + CUB + CYP + CZE + DEN + DJI + DMA + DOM + ECU + EGY + ERI + ESA + ESP + EST + ETH + FIJ + FIN + FRA + FSM + GAB + GAM + GBR + GBS + GEO + GEQ + GER + GHA + GRE + GRN + GUA + GUI + GUM + GUY + HAI + HKG + HON + HUN + INA + IND + IOA + IRI + IRL + IRQ + ISL + ISR + ISV + ITA + IVB + JAM + JOR + JPN + KAZ + KEN + KGZ + KIR + KOR + KOS + KSA + LAO + LAT + LBA + LBR + LCA + LES + LIB + LIE + LTU + LUX + MAD + MAR + MAS + MAW + MDA + MDV + MEX + MGL + MHL + MKD + MLI + MLT + MNE + MON + MOZ + MRI + MTN + MYA + NAM + NCA + NED + NEP + NGR + NIG + NOR + NRU + NZL + OMA + PAK + PAN + PAR + PER + PHI + PLE + PLW + PNG + POL + POR + PRK + PUR + QAT + ROT + ROU + RSA + RUS + RWA + SAM + SEN + SEY + SIN + SKN + SLE + SLO + SMR + SOL + SOM + SRB + SRI + SSD + STP + SUD + SUI + SUR + SVK + SWE + SWZ + SYR + TAN + TGA + THA + TJK + TKM + TLS + TOG + TPE + TTO + TUN + TUR + TUV + UAE + UGA + UKR + URU + USA + UZB + VAN + VEN + VIE + VIN + YEM + ZAM + ZIM + + + nationality + + + + + + + female + male + + + sex diff --git a/test/output/autoDotSize.svg b/test/output/autoDotSize.svg index 8dbcfea5ba..5f63a8fa47 100644 --- a/test/output/autoDotSize.svg +++ b/test/output/autoDotSize.svg @@ -13,22 +13,19 @@ white-space: pre; } - - - 2014 - - - 2015 - - - 2016 - - - 2017 - - - 2018 - + + + + + + + + + 2014 + 2015 + 2016 + 2017 + 2018 diff --git a/test/output/autoDotSize2.svg b/test/output/autoDotSize2.svg index 932f40337e..224c2afc25 100644 --- a/test/output/autoDotSize2.svg +++ b/test/output/autoDotSize2.svg @@ -13,48 +13,45 @@ white-space: pre; } - - - 14 - - - 15 - - - 16 - - - 17 - - - 18 - - - 19 - - - 20 - - - 21 - ↑ culmen_depth_mm + + + + + + + + + - - - 35 - - - 40 - - - 45 - - - 50 - - - 55 - culmen_length_mm → + + 14 + 15 + 16 + 17 + 18 + 19 + 20 + 21 + + + ↑ culmen_depth_mm + + + + + + + + + + 35 + 40 + 45 + 50 + 55 + + + culmen_length_mm → diff --git a/test/output/autoDotUnsortedDate.svg b/test/output/autoDotUnsortedDate.svg index 535075c4eb..30d664e7c5 100644 --- a/test/output/autoDotUnsortedDate.svg +++ b/test/output/autoDotUnsortedDate.svg @@ -13,69 +13,59 @@ white-space: pre; } - - - 1.3 - - - 1.4 - - - 1.5 - - - 1.6 - - - 1.7 - - - 1.8 - - - 1.9 - - - 2.0 - - - 2.1 - - - 2.2 - ↑ height + + + + + + + + + + + - - - 1955 - - - 1960 - - - 1965 - - - 1970 - - - 1975 - - - 1980 - - - 1985 - - - 1990 - - - 1995 - - - 2000 - date_of_birth → + + 1.3 + 1.4 + 1.5 + 1.6 + 1.7 + 1.8 + 1.9 + 2.0 + 2.1 + 2.2 + + + ↑ height + + + + + + + + + + + + + + + 1955 + 1960 + 1965 + 1970 + 1975 + 1980 + 1985 + 1990 + 1995 + 2000 + + + date_of_birth → diff --git a/test/output/autoHeatmap.svg b/test/output/autoHeatmap.svg index c516f381a7..a22a2400ae 100644 --- a/test/output/autoHeatmap.svg +++ b/test/output/autoHeatmap.svg @@ -13,54 +13,49 @@ white-space: pre; } - - - 2,500 - - - 3,000 - - - 3,500 - - - 4,000 - - - 4,500 - - - 5,000 - - - 5,500 - - - 6,000 - - - 6,500 - ↑ body_mass_g + + + + + + + + + + - - - 35 - - - 40 - - - 45 - - - 50 - - - 55 - - - 60 - culmen_length_mm → + + 2,500 + 3,000 + 3,500 + 4,000 + 4,500 + 5,000 + 5,500 + 6,000 + 6,500 + + + ↑ body_mass_g + + + + + + + + + + + 35 + 40 + 45 + 50 + 55 + 60 + + + culmen_length_mm → diff --git a/test/output/autoHeatmapOrdCont.svg b/test/output/autoHeatmapOrdCont.svg index 8eddb40b9a..af5ec467a0 100644 --- a/test/output/autoHeatmapOrdCont.svg +++ b/test/output/autoHeatmapOrdCont.svg @@ -13,36 +13,37 @@ white-space: pre; } - - - Adelie - - - Chinstrap - - - Gentoo - species + + + + - - - 35 - - - 40 - - - 45 - - - 50 - - - 55 - - - 60 - culmen_length_mm → + + Adelie + Chinstrap + Gentoo + + + species + + + + + + + + + + + 35 + 40 + 45 + 50 + 55 + 60 + + + culmen_length_mm → diff --git a/test/output/autoHeatmapOrdinal.svg b/test/output/autoHeatmapOrdinal.svg index 4dedcf37b8..71b42fc1eb 100644 --- a/test/output/autoHeatmapOrdinal.svg +++ b/test/output/autoHeatmapOrdinal.svg @@ -13,27 +13,31 @@ white-space: pre; } - - - Adelie - - - Chinstrap - - - Gentoo - species + + + + - - - Biscoe - - - Dream - - - Torgersen - island + + Adelie + Chinstrap + Gentoo + + + species + + + + + + + + Biscoe + Dream + Torgersen + + + island diff --git a/test/output/autoHistogram.svg b/test/output/autoHistogram.svg index 37327a1507..12fdead10c 100644 --- a/test/output/autoHistogram.svg +++ b/test/output/autoHistogram.svg @@ -13,69 +13,59 @@ white-space: pre; } - - - 0 - - - 50 - - - 100 - - - 150 - - - 200 - - - 250 - - - 300 - - - 350 - - - 400 - - - 450 - - - 500 - - - 550 - - - 600 - ↑ Frequency + + + + + + + + + + + + + + - - - 40 - - - 60 - - - 80 - - - 100 - - - 120 - - - 140 - - - 160 - weight → + + 0 + 50 + 100 + 150 + 200 + 250 + 300 + 350 + 400 + 450 + 500 + 550 + 600 + + + ↑ Frequency + + + + + + + + + + + + 40 + 60 + 80 + 100 + 120 + 140 + 160 + + + weight → diff --git a/test/output/autoHistogramDate.svg b/test/output/autoHistogramDate.svg index 5f49a31d9a..0ed682670c 100644 --- a/test/output/autoHistogramDate.svg +++ b/test/output/autoHistogramDate.svg @@ -13,69 +13,59 @@ white-space: pre; } - - - 0 - - - 100 - - - 200 - - - 300 - - - 400 - - - 500 - - - 600 - - - 700 - - - 800 - - - 900 - ↑ Frequency + + + + + + + + + + + - - - 1955 - - - 1960 - - - 1965 - - - 1970 - - - 1975 - - - 1980 - - - 1985 - - - 1990 - - - 1995 - - - 2000 - date_of_birth → + + 0 + 100 + 200 + 300 + 400 + 500 + 600 + 700 + 800 + 900 + + + ↑ Frequency + + + + + + + + + + + + + + + 1955 + 1960 + 1965 + 1970 + 1975 + 1980 + 1985 + 1990 + 1995 + 2000 + + + date_of_birth → diff --git a/test/output/autoHistogramGroup.svg b/test/output/autoHistogramGroup.svg index 3e5df97a4b..3441715bef 100644 --- a/test/output/autoHistogramGroup.svg +++ b/test/output/autoHistogramGroup.svg @@ -13,45 +13,43 @@ white-space: pre; } - - - 0 - - - 20 - - - 40 - - - 60 - - - 80 - - - 100 - - - 120 - - - 140 - - - 160 - ↑ Frequency + + + + + + + + + + - - - Biscoe - - - Dream - - - Torgersen - island + + 0 + 20 + 40 + 60 + 80 + 100 + 120 + 140 + 160 + + + ↑ Frequency + + + + + + + + Biscoe + Dream + Torgersen + + + island diff --git a/test/output/autoLine.svg b/test/output/autoLine.svg index 83256fe1a3..0fea073253 100644 --- a/test/output/autoLine.svg +++ b/test/output/autoLine.svg @@ -13,66 +13,54 @@ white-space: pre; } - - - 60 - - - 70 - - - 80 - - - 90 - - - 100 - - - 110 - - - 120 - - - 130 - - - 140 - - - 150 - - - 160 - - - 170 - - - 180 - - - 190 - ↑ Close + + + + + + + + + + + + + + + - - - 2014 - - - 2015 - - - 2016 - - - 2017 - - - 2018 - + + 60 + 70 + 80 + 90 + 100 + 110 + 120 + 130 + 140 + 150 + 160 + 170 + 180 + 190 + + + ↑ Close + + + + + + + + + + 2014 + 2015 + 2016 + 2017 + 2018 diff --git a/test/output/autoLineColor.svg b/test/output/autoLineColor.svg index 6cb8df269c..e3267fd3aa 100644 --- a/test/output/autoLineColor.svg +++ b/test/output/autoLineColor.svg @@ -13,66 +13,54 @@ white-space: pre; } - - - 60 - - - 70 - - - 80 - - - 90 - - - 100 - - - 110 - - - 120 - - - 130 - - - 140 - - - 150 - - - 160 - - - 170 - - - 180 - - - 190 - ↑ Close + + + + + + + + + + + + + + + - - - 2014 - - - 2015 - - - 2016 - - - 2017 - - - 2018 - + + 60 + 70 + 80 + 90 + 100 + 110 + 120 + 130 + 140 + 150 + 160 + 170 + 180 + 190 + + + ↑ Close + + + + + + + + + + 2014 + 2015 + 2016 + 2017 + 2018 diff --git a/test/output/autoLineColorSeries.svg b/test/output/autoLineColorSeries.svg index 6d5b4e29e7..71625400fc 100644 --- a/test/output/autoLineColorSeries.svg +++ b/test/output/autoLineColorSeries.svg @@ -13,78 +13,62 @@ white-space: pre; } - - - 200 - - - 400 - - - 600 - - - 800 - - - 1,000 - - - 1,200 - - - 1,400 - - - 1,600 - - - 1,800 - - - 2,000 - - - 2,200 - - - 2,400 - ↑ unemployed + + + + + + + + + + + + + - - - 2000 - - - 2001 - - - 2002 - - - 2003 - - - 2004 - - - 2005 - - - 2006 - - - 2007 - - - 2008 - - - 2009 - - - 2010 - + + 200 + 400 + 600 + 800 + 1,000 + 1,200 + 1,400 + 1,600 + 1,800 + 2,000 + 2,200 + 2,400 + + + ↑ unemployed + + + + + + + + + + + + + + + + 2000 + 2001 + 2002 + 2003 + 2004 + 2005 + 2006 + 2007 + 2008 + 2009 + 2010 diff --git a/test/output/autoLineFacet.svg b/test/output/autoLineFacet.svg index 8d760f6f8b..9d2115e595 100644 --- a/test/output/autoLineFacet.svg +++ b/test/output/autoLineFacet.svg @@ -13,264 +13,261 @@ white-space: pre; } - - - Agriculture + + + Agriculture - - Business services + + + - - Construction + + 1,000 + 2,000 - - Education and Health - - - Finance - - - Government - - - Information - - - Leisure and hospitality - - - Manufacturing - - - Mining and Extraction + + + - - Other + + + + Business services - - Self-employed + + + - - Transportation and Utilities + + 1,000 + 2,000 - - Wholesale and Retail Trade + + + - - - 2000 - - - 2002 - - - 2004 - - - 2006 + + + Construction - - 2008 + + + - - 2010 + + 1,000 + 2,000 - - - - 1,000 + + + - - 2,000 - ↑ unemployed - - - 1,000 + + + Education and Health - - 2,000 + + + - - - - 1,000 + + 1,000 + 2,000 - - 2,000 + + + - - - 1,000 + + + Finance - - 2,000 + + + - - - - 1,000 + + 1,000 + 2,000 - - 2,000 + + + - - - 1,000 + + + Government - - 2,000 + + + - - - - 1,000 + + 1,000 + 2,000 - - 2,000 + + + - - - 1,000 + + + Information - - 2,000 + + + - - - - 1,000 + + 1,000 + 2,000 - - 2,000 + + + - - - 1,000 + + + Leisure and hospitality - - 2,000 + + + - - - - 1,000 + + 1,000 + 2,000 - - 2,000 + + + - - - 1,000 + + + Manufacturing - - 2,000 + + + - - - - 1,000 + + 1,000 + 2,000 - - 2,000 + + + - - - 1,000 + + + Mining and Extraction - - 2,000 + + + - - - - - + + 1,000 + 2,000 - - - + - + - - - - + + + Other - - - - - + + + - - - - - + + 1,000 + 2,000 - - - + - + - - - - + + + Self-employed - - - - - + + + - - - - - + + 1,000 + 2,000 - - - + - + - - - - + + + Transportation and Utilities - - - - - + + + - - - + + 1,000 + 2,000 + + - + - - + + + Wholesale and Retail Trade + + + + + + + 1,000 + 2,000 + + + + + + + + + + + 2000 + 2002 + 2004 + 2006 + 2008 + 2010 + + - + + + ↑ unemployed + \ No newline at end of file diff --git a/test/output/autoLineHistogram.svg b/test/output/autoLineHistogram.svg index 24e1b5a691..c730559272 100644 --- a/test/output/autoLineHistogram.svg +++ b/test/output/autoLineHistogram.svg @@ -13,63 +13,55 @@ white-space: pre; } - - - 20 - - - 40 - - - 60 - - - 80 - - - 100 - - - 120 - - - 140 - - - 160 - - - 180 - - - 200 - - - 220 - - - 240 - - - 260 - ↑ Frequency + + + + + + + + + + + + + + - - - 50,000,000 - - - 100,000,000 - - - 150,000,000 - - - 200,000,000 - - - 250,000,000 - Volume → + + 20 + 40 + 60 + 80 + 100 + 120 + 140 + 160 + 180 + 200 + 220 + 240 + 260 + + + ↑ Frequency + + + + + + + + + + 50,000,000 + 100,000,000 + 150,000,000 + 200,000,000 + 250,000,000 + + + Volume → diff --git a/test/output/autoRectColorReducer.svg b/test/output/autoRectColorReducer.svg index 2cd8e36abb..4ebba9f114 100644 --- a/test/output/autoRectColorReducer.svg +++ b/test/output/autoRectColorReducer.svg @@ -13,54 +13,49 @@ white-space: pre; } - - - 0 - - - 5 - - - 10 - - - 15 - - - 20 - - - 25 - - - 30 - - - 35 - - - 40 - ↑ Frequency + + + + + + + + + + - - - 35 - - - 40 - - - 45 - - - 50 - - - 55 - - - 60 - culmen_length_mm → + + 0 + 5 + 10 + 15 + 20 + 25 + 30 + 35 + 40 + + + ↑ Frequency + + + + + + + + + + + 35 + 40 + 45 + 50 + 55 + 60 + + + culmen_length_mm → diff --git a/test/output/autoRectStackColor.svg b/test/output/autoRectStackColor.svg index 13cb082264..8ed4fcf340 100644 --- a/test/output/autoRectStackColor.svg +++ b/test/output/autoRectStackColor.svg @@ -13,54 +13,49 @@ white-space: pre; } - - - 0 - - - 5 - - - 10 - - - 15 - - - 20 - - - 25 - - - 30 - - - 35 - - - 40 - ↑ Frequency + + + + + + + + + + - - - 35 - - - 40 - - - 45 - - - 50 - - - 55 - - - 60 - culmen_length_mm → + + 0 + 5 + 10 + 15 + 20 + 25 + 30 + 35 + 40 + + + ↑ Frequency + + + + + + + + + + + 35 + 40 + 45 + 50 + 55 + 60 + + + culmen_length_mm → diff --git a/test/output/autoShorthandContinuous.svg b/test/output/autoShorthandContinuous.svg index e786cb43a5..0e986be67e 100644 --- a/test/output/autoShorthandContinuous.svg +++ b/test/output/autoShorthandContinuous.svg @@ -13,63 +13,52 @@ white-space: pre; } - - - 0.0 - - - 0.2 - - - 0.4 - - - 0.6 - - - 0.8 - - - 1.0 - - - 1.2 - - - 1.4 - - - 1.6 - - - 1.8 - - - 2.0 - ↑ Frequency + + + + + + + + + + + + - - - 0 - - - 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - + + 0.0 + 0.2 + 0.4 + 0.6 + 0.8 + 1.0 + 1.2 + 1.4 + 1.6 + 1.8 + 2.0 + + + ↑ Frequency + + + + + + + + + + + + 0 + 1 + 2 + 3 + 4 + 5 + 6 diff --git a/test/output/autoShorthandOrdinal.svg b/test/output/autoShorthandOrdinal.svg index f74c94b337..ed7733b6b4 100644 --- a/test/output/autoShorthandOrdinal.svg +++ b/test/output/autoShorthandOrdinal.svg @@ -13,66 +13,54 @@ white-space: pre; } - - - 0.0 - - - 0.2 - - - 0.4 - - - 0.6 - - - 0.8 - - - 1.0 - - - 1.2 - - - 1.4 - - - 1.6 - - - 1.8 - - - 2.0 - - - 2.2 - - - 2.4 - - - 2.6 - - - 2.8 - - - 3.0 - ↑ Frequency + + + + + + + + + + + + + + + + + - - - apple - - - orange - - - pomegranate - + + 0.0 + 0.2 + 0.4 + 0.6 + 0.8 + 1.0 + 1.2 + 1.4 + 1.6 + 1.8 + 2.0 + 2.2 + 2.4 + 2.6 + 2.8 + 3.0 + + + ↑ Frequency + + + + + + + + apple + orange + pomegranate diff --git a/test/output/autoTickContinuous.svg b/test/output/autoTickContinuous.svg index 27d9ceb0ee..7ff04232ad 100644 --- a/test/output/autoTickContinuous.svg +++ b/test/output/autoTickContinuous.svg @@ -13,22 +13,22 @@ white-space: pre; } - - - 35 - - - 40 - - - 45 - - - 50 - - - 55 - culmen_length_mm → + + + + + + + + + 35 + 40 + 45 + 50 + 55 + + + culmen_length_mm → diff --git a/test/output/autoTickDate.svg b/test/output/autoTickDate.svg index 728a602305..1393fe90e0 100644 --- a/test/output/autoTickDate.svg +++ b/test/output/autoTickDate.svg @@ -13,37 +13,32 @@ white-space: pre; } - - - 1955 - - - 1960 - - - 1965 - - - 1970 - - - 1975 - - - 1980 - - - 1985 - - - 1990 - - - 1995 - - - 2000 - date_of_birth → + + + + + + + + + + + + + + 1955 + 1960 + 1965 + 1970 + 1975 + 1980 + 1985 + 1990 + 1995 + 2000 + + + date_of_birth → diff --git a/test/output/autoTickOrdinal.svg b/test/output/autoTickOrdinal.svg index 65d3aa3f35..9d562a7f31 100644 --- a/test/output/autoTickOrdinal.svg +++ b/test/output/autoTickOrdinal.svg @@ -13,16 +13,18 @@ white-space: pre; } - - - Biscoe - - - Dream - - - Torgersen - island + + + + + + + Biscoe + Dream + Torgersen + + + island From 122979fb76fc51a3f62f42089ebe10e927b02017 Mon Sep 17 00:00:00 2001 From: Toph Tucker Date: Thu, 2 Feb 2023 23:53:37 -0500 Subject: [PATCH 16/22] Default size reduce --- src/marks/auto.js | 27 +- test/output/autoDotOrdinal.svg | 11946 +--------------- ...nuous.svg => autoNullReduceContinuous.svg} | 0 ...utoTickDate.svg => autoNullReduceDate.svg} | 0 test/output/autoNullReduceOrdinal.svg | 34 + test/output/autoTickOrdinal.svg | 375 - test/plots/autoplot.js | 6 +- 7 files changed, 467 insertions(+), 11921 deletions(-) rename test/output/{autoTickContinuous.svg => autoNullReduceContinuous.svg} (100%) rename test/output/{autoTickDate.svg => autoNullReduceDate.svg} (100%) create mode 100644 test/output/autoNullReduceOrdinal.svg delete mode 100644 test/output/autoTickOrdinal.svg diff --git a/src/marks/auto.js b/src/marks/auto.js index c281418a22..4a3bc73786 100644 --- a/src/marks/auto.js +++ b/src/marks/auto.js @@ -29,11 +29,12 @@ export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { const {value: xValue} = x; const {value: yValue} = y; - const {value: sizeValue, reduce: sizeReduce} = size; + const {value: sizeValue} = size; // Determine the default reducer, if any. let {reduce: xReduce} = x; let {reduce: yReduce} = y; + let {reduce: sizeReduce} = size; if (xReduce === undefined) xReduce = yReduce == null && xValue == null && sizeValue == null && yValue != null ? "count" : null; if (yReduce === undefined) @@ -72,6 +73,19 @@ export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { if (color) color.label = labelof(colorValue); if (size) size.label = labelof(sizeValue); + // Determine the default size reducer, if any. + if ( + sizeReduce === undefined && + sizeValue == null && + colorReduce == null && + xReduce == null && + yReduce == null && + (!x || isOrdinal(x)) && + (!y || isOrdinal(y)) + ) { + sizeReduce = "count"; + } + // Determine the default mark type. if (mark === undefined) { mark = @@ -167,10 +181,13 @@ export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { transformOptions.x = xReduce; transform = isOrdinal(y) ? groupY : binY; } else if (colorReduce != null || sizeReduce != null) { - if (isOrdinal(x) && isOrdinal(y)) transform = group; - else if (!isOrdinal(x) && !isOrdinal(y)) transform = bin; - else if (isOrdinal(x) && !isOrdinal(y)) transform = binY; - else if (!isOrdinal(x) && isOrdinal(y)) transform = binX; + if (x && y) { + transform = isOrdinal(x) && isOrdinal(y) ? group : isOrdinal(x) ? binY : isOrdinal(y) ? binX : bin; + } else if (x) { + transform = isOrdinal(x) ? groupX : binX; + } else if (y) { + transform = isOrdinal(y) ? groupY : binY; + } } if (transform) options = transform(transformOptions, options); diff --git a/test/output/autoDotOrdinal.svg b/test/output/autoDotOrdinal.svg index 9deb9c44cc..005d304738 100644 --- a/test/output/autoDotOrdinal.svg +++ b/test/output/autoDotOrdinal.svg @@ -446,11543 +446,413 @@ sex - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/autoTickContinuous.svg b/test/output/autoNullReduceContinuous.svg similarity index 100% rename from test/output/autoTickContinuous.svg rename to test/output/autoNullReduceContinuous.svg diff --git a/test/output/autoTickDate.svg b/test/output/autoNullReduceDate.svg similarity index 100% rename from test/output/autoTickDate.svg rename to test/output/autoNullReduceDate.svg diff --git a/test/output/autoNullReduceOrdinal.svg b/test/output/autoNullReduceOrdinal.svg new file mode 100644 index 0000000000..355bbe1f78 --- /dev/null +++ b/test/output/autoNullReduceOrdinal.svg @@ -0,0 +1,34 @@ + + + + + + + + + Biscoe + Dream + Torgersen + + + island + + + + + + + \ No newline at end of file diff --git a/test/output/autoTickOrdinal.svg b/test/output/autoTickOrdinal.svg deleted file mode 100644 index 9d562a7f31..0000000000 --- a/test/output/autoTickOrdinal.svg +++ /dev/null @@ -1,375 +0,0 @@ - - - - - - - - - Biscoe - Dream - Torgersen - - - island - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/test/plots/autoplot.js b/test/plots/autoplot.js index 3cd5ae39ce..34442def4a 100644 --- a/test/plots/autoplot.js +++ b/test/plots/autoplot.js @@ -16,17 +16,17 @@ export async function autoHistogramGroup() { return Plot.auto(penguins, {x: "island"}).plot(); } -export async function autoTickContinuous() { +export async function autoNullReduceContinuous() { const penguins = await d3.csv("data/penguins.csv", d3.autoType); return Plot.auto(penguins, {x: "culmen_length_mm", y: {reduce: null}}).plot(); } -export async function autoTickOrdinal() { +export async function autoNullReduceOrdinal() { const penguins = await d3.csv("data/penguins.csv", d3.autoType); return Plot.auto(penguins, {x: "island", y: {reduce: null}}).plot(); } -export async function autoTickDate() { +export async function autoNullReduceDate() { const athletes = await d3.csv("data/athletes.csv", d3.autoType); return Plot.auto(athletes, {x: "date_of_birth", y: {reduce: null}}).plot(); } From 5c05fd57946376ee550b69e3db4a734ef9aecfb4 Mon Sep 17 00:00:00 2001 From: Toph Tucker Date: Thu, 2 Feb 2023 23:56:26 -0500 Subject: [PATCH 17/22] Rm todo --- src/marks/auto.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/marks/auto.js b/src/marks/auto.js index 4a3bc73786..8464d49044 100644 --- a/src/marks/auto.js +++ b/src/marks/auto.js @@ -46,7 +46,6 @@ export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { const {value: fxValue} = fx; const {value: fyValue} = fy; - // TODO Default sizeReduce for ordinal/ordinal case? // TODO The line mark will need z? // TODO Limit and sort for bar charts (e.g. alphabet)? // TODO Look at Plot warnings and see how many we can prevent From 033224dc759b76c06bbeacf3d8119858651caa11 Mon Sep 17 00:00:00 2001 From: Toph Tucker Date: Fri, 3 Feb 2023 00:39:58 -0500 Subject: [PATCH 18/22] Remove shorthand for now :( --- src/marks/auto.js | 6 +- test/output/autoShorthandContinuous.svg | 71 ------------------------ test/output/autoShorthandOrdinal.svg | 73 ------------------------- test/plots/autoplot.js | 8 --- 4 files changed, 3 insertions(+), 155 deletions(-) delete mode 100644 test/output/autoShorthandContinuous.svg delete mode 100644 test/output/autoShorthandOrdinal.svg diff --git a/src/marks/auto.js b/src/marks/auto.js index 8464d49044..9f25e9eb51 100644 --- a/src/marks/auto.js +++ b/src/marks/auto.js @@ -14,9 +14,6 @@ import {marks} from "../mark.js"; import {ascending} from "d3"; export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { - // Shorthand: array of primitives should result in a histogram - if (x === undefined && y === undefined) x = identity; - // Allow x and y and other dimensions to be specified as shorthand field names // (but note that they can also be specified as a {transform} object such as // Plot.identity). @@ -27,6 +24,9 @@ export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { if (!isOptions(color)) color = isColor(color) ? {color} : makeOptions(color); if (!isOptions(size)) size = makeOptions(size); + // TODO Shorthand: array of primitives should result in a histogram + if (x.value === undefined && y.value === undefined) throw new Error("must specify x or y"); + const {value: xValue} = x; const {value: yValue} = y; const {value: sizeValue} = size; diff --git a/test/output/autoShorthandContinuous.svg b/test/output/autoShorthandContinuous.svg deleted file mode 100644 index 0e986be67e..0000000000 --- a/test/output/autoShorthandContinuous.svg +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - 0.0 - 0.2 - 0.4 - 0.6 - 0.8 - 1.0 - 1.2 - 1.4 - 1.6 - 1.8 - 2.0 - - - ↑ Frequency - - - - - - - - - - - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - - - - - - - - - - \ No newline at end of file diff --git a/test/output/autoShorthandOrdinal.svg b/test/output/autoShorthandOrdinal.svg deleted file mode 100644 index ed7733b6b4..0000000000 --- a/test/output/autoShorthandOrdinal.svg +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - 0.0 - 0.2 - 0.4 - 0.6 - 0.8 - 1.0 - 1.2 - 1.4 - 1.6 - 1.8 - 2.0 - 2.2 - 2.4 - 2.6 - 2.8 - 3.0 - - - ↑ Frequency - - - - - - - - apple - orange - pomegranate - - - - - - - - - - \ No newline at end of file diff --git a/test/plots/autoplot.js b/test/plots/autoplot.js index 34442def4a..afea90c234 100644 --- a/test/plots/autoplot.js +++ b/test/plots/autoplot.js @@ -212,11 +212,3 @@ export async function autoDotFacet2() { color: "sex" }).plot(); } - -export async function autoShorthandContinuous() { - return Plot.auto([1, 1, 2, 3, 5]).plot(); -} - -export async function autoShorthandOrdinal() { - return Plot.auto(["apple", "apple", "orange", "apple", "orange", "pomegranate"]).plot(); -} From 464a5310152fc0ebd66f345ac866c1423e051e4d Mon Sep 17 00:00:00 2001 From: Toph Tucker Date: Fri, 3 Feb 2023 00:41:19 -0500 Subject: [PATCH 19/22] rm unused import --- src/marks/auto.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/marks/auto.js b/src/marks/auto.js index 9f25e9eb51..1694aaf0b2 100644 --- a/src/marks/auto.js +++ b/src/marks/auto.js @@ -1,5 +1,5 @@ import {InternSet} from "d3"; -import {isOrdinal, labelof, valueof, isOptions, identity, isColor} from "../options.js"; +import {isOrdinal, labelof, valueof, isOptions, isColor} from "../options.js"; import {area, areaX, areaY} from "./area.js"; import {dot} from "./dot.js"; import {line, lineX, lineY} from "./line.js"; From 418e46f8d2ad24472fe3a27c4f4923a4d61fe5ba Mon Sep 17 00:00:00 2001 From: Mike Bostock Date: Fri, 3 Feb 2023 07:32:01 -0800 Subject: [PATCH 20/22] error on null x & y, too --- src/marks/auto.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/marks/auto.js b/src/marks/auto.js index 1694aaf0b2..97a0bb319b 100644 --- a/src/marks/auto.js +++ b/src/marks/auto.js @@ -24,9 +24,6 @@ export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { if (!isOptions(color)) color = isColor(color) ? {color} : makeOptions(color); if (!isOptions(size)) size = makeOptions(size); - // TODO Shorthand: array of primitives should result in a histogram - if (x.value === undefined && y.value === undefined) throw new Error("must specify x or y"); - const {value: xValue} = x; const {value: yValue} = y; const {value: sizeValue} = size; @@ -64,6 +61,9 @@ export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { fx = valueof(data, fxValue); // TODO Should we still materialize if heuristic doesn't depend on it? fy = valueof(data, fyValue); + // TODO Shorthand: array of primitives should result in a histogram + if (!x && !y) throw new Error("must specify x or y"); + let z, zReduce; // Propagate the x and y labels (field names), if any. From bde576248dba173fe9d5cd03973279e0329f4319 Mon Sep 17 00:00:00 2001 From: Mike Bostock Date: Fri, 3 Feb 2023 07:36:53 -0800 Subject: [PATCH 21/22] fix facet axis labels --- src/marks/auto.js | 23 +++++++++++++---------- test/output/autoDotFacet.svg | 3 +++ test/output/autoDotFacet2.svg | 6 ++++++ test/output/autoLineFacet.svg | 3 +++ 4 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/marks/auto.js b/src/marks/auto.js index 97a0bb319b..643e31bbe7 100644 --- a/src/marks/auto.js +++ b/src/marks/auto.js @@ -13,25 +13,30 @@ import {group, groupX, groupY} from "../transforms/group.js"; import {marks} from "../mark.js"; import {ascending} from "d3"; -export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { +export function auto(data, {x, y, color, size, fx, fy, mark} = {}) { // Allow x and y and other dimensions to be specified as shorthand field names // (but note that they can also be specified as a {transform} object such as // Plot.identity). if (!isOptions(x)) x = makeOptions(x); if (!isOptions(y)) y = makeOptions(y); - if (!isOptions(fx)) fx = makeOptions(fx); - if (!isOptions(fy)) fy = makeOptions(fy); if (!isOptions(color)) color = isColor(color) ? {color} : makeOptions(color); if (!isOptions(size)) size = makeOptions(size); + // We don’t apply any type inference to the fx and fy channels, if present, so + // these are simply passed-through to the underlying mark’s options. + if (isOptions(fx)) ({value: fx} = makeOptions(fx)); + if (isOptions(fy)) ({value: fy} = makeOptions(fy)); + const {value: xValue} = x; const {value: yValue} = y; const {value: sizeValue} = size; + const {value: colorValue, color: colorColor} = color; // Determine the default reducer, if any. let {reduce: xReduce} = x; let {reduce: yReduce} = y; let {reduce: sizeReduce} = size; + let {reduce: colorReduce} = color; if (xReduce === undefined) xReduce = yReduce == null && xValue == null && sizeValue == null && yValue != null ? "count" : null; if (yReduce === undefined) @@ -39,9 +44,6 @@ export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { let {zero: xZero} = x; let {zero: yZero} = y; - const {value: colorValue, reduce: colorReduce, color: colorColor} = color; - const {value: fxValue} = fx; - const {value: fyValue} = fy; // TODO The line mark will need z? // TODO Limit and sort for bar charts (e.g. alphabet)? @@ -58,15 +60,16 @@ export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { y = valueof(data, yValue); color = valueof(data, colorValue); size = valueof(data, sizeValue); - fx = valueof(data, fxValue); // TODO Should we still materialize if heuristic doesn't depend on it? - fy = valueof(data, fyValue); // TODO Shorthand: array of primitives should result in a histogram if (!x && !y) throw new Error("must specify x or y"); let z, zReduce; - // Propagate the x and y labels (field names), if any. + // Propagate the x and y labels (field names), if any. This is necessary for + // any column we materialize (and hence, we don’t need to do this for fx and + // fy, since those columns are not needed for type inference and hence are not + // greedily materialized). if (x) x.label = labelof(xValue); if (y) y.label = labelof(yValue); if (color) color.label = labelof(colorValue); @@ -198,7 +201,7 @@ export function auto(data, {x, y, fx, fy, color, size, mark} = {}) { // In the case of filled marks (particularly bars and areas) the frame and // rules should come after the mark; in the case of stroked marks // (particularly dots and lines) they should come before the mark. - const frames = fx || fy ? frame({strokeOpacity: 0.1}) : null; + const frames = fx != null || fy != null ? frame({strokeOpacity: 0.1}) : null; const rules = [xZero ? ruleX([0]) : null, yZero ? ruleY([0]) : null]; mark = mark(data, options); return colorMode === "stroke" ? marks(frames, rules, mark) : marks(frames, mark, rules); diff --git a/test/output/autoDotFacet.svg b/test/output/autoDotFacet.svg index 6ea8386d43..898d97b872 100644 --- a/test/output/autoDotFacet.svg +++ b/test/output/autoDotFacet.svg @@ -433,6 +433,9 @@ + + island + ↑ culmen_length_mm diff --git a/test/output/autoDotFacet2.svg b/test/output/autoDotFacet2.svg index b1758b1983..cb26cf9381 100644 --- a/test/output/autoDotFacet2.svg +++ b/test/output/autoDotFacet2.svg @@ -498,6 +498,12 @@ 55 + + species + + + island + ↑ culmen_length_mm diff --git a/test/output/autoLineFacet.svg b/test/output/autoLineFacet.svg index 9d2115e595..428d706d7c 100644 --- a/test/output/autoLineFacet.svg +++ b/test/output/autoLineFacet.svg @@ -267,6 +267,9 @@ + + industry + ↑ unemployed From d373b933d493f78b29b3da32534929229cc2d3b6 Mon Sep 17 00:00:00 2001 From: Mike Bostock Date: Fri, 3 Feb 2023 07:48:06 -0800 Subject: [PATCH 22/22] require opposite channel when reducing --- src/marks/auto.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/marks/auto.js b/src/marks/auto.js index 643e31bbe7..b7f31e3dc1 100644 --- a/src/marks/auto.js +++ b/src/marks/auto.js @@ -63,6 +63,8 @@ export function auto(data, {x, y, color, size, fx, fy, mark} = {}) { // TODO Shorthand: array of primitives should result in a histogram if (!x && !y) throw new Error("must specify x or y"); + if (xReduce != null && !y) throw new Error("reducing x requires y"); + if (yReduce != null && !x) throw new Error("reducing y requires x"); let z, zReduce; @@ -95,15 +97,15 @@ export function auto(data, {x, y, color, size, fx, fy, mark} = {}) { ? "dot" : xReduce != null || yReduce != null || colorReduce != null ? "bar" - : xValue != null && yValue != null + : x && y ? isContinuous(x) && isContinuous(y) && (isMonotonic(x) || isMonotonic(y)) ? "line" : (isContinuous(x) && xZero) || (isContinuous(y) && yZero) ? "bar" : "dot" - : xValue != null + : x ? "rule" - : yValue != null + : y ? "rule" : null; } @@ -151,16 +153,16 @@ export function auto(data, {x, y, color, size, fx, fy, mark} = {}) { ? barX : rectX : colorReduce != null - ? isOrdinal(x) && isOrdinal(y) + ? x && y && isOrdinal(x) && isOrdinal(y) ? cell - : isOrdinal(x) + : x && isOrdinal(x) ? barY - : isOrdinal(y) + : y && isOrdinal(y) ? barX : rect - : isOrdinal(x) && isOrdinal(y) + : x && y && isOrdinal(x) && isOrdinal(y) ? cell - : isOrdinal(y) + : y && isOrdinal(y) ? barX : barY; colorMode = "fill";