diff --git a/src/marks/hexgrid.js b/src/marks/hexgrid.js index b3d131e375..95512c29a0 100644 --- a/src/marks/hexgrid.js +++ b/src/marks/hexgrid.js @@ -3,7 +3,7 @@ import {Mark} from "../mark.js"; import {number, singleton} from "../options.js"; import {applyChannelStyles, applyDirectStyles, applyIndirectStyles, applyTransform} from "../style.js"; import {sqrt4_3} from "../symbol.js"; -import {ox, oy} from "../transforms/hexbin.js"; +import {ox} from "../transforms/hexbin.js"; const defaults = { ariaLabel: "hexgrid", @@ -26,15 +26,15 @@ export class Hexgrid extends Mark { const {marginTop, marginRight, marginBottom, marginLeft, width, height} = dimensions; const x0 = marginLeft - ox, x1 = width - marginRight - ox, - y0 = marginTop - oy, - y1 = height - marginBottom - oy, + y0 = marginTop, + y1 = height - marginBottom, rx = binWidth / 2, ry = rx * sqrt4_3, hy = ry / 2, wx = rx * 2, wy = ry * 1.5, - i0 = Math.floor(x0 / wx), - i1 = Math.ceil(x1 / wx), + i0 = Math.floor((x0 - rx) / wx), + i1 = Math.ceil((x1 + rx) / wx), j0 = Math.floor((y0 + hy) / wy), j1 = Math.ceil((y1 - hy) / wy) + 1, path = `m0,${round(-ry)}l${round(rx)},${round(hy)}v${round(ry)}l${round(-rx)},${round(hy)}`; @@ -47,7 +47,7 @@ export class Hexgrid extends Mark { return create("svg:g", context) .datum(0) .call(applyIndirectStyles, this, dimensions, context) - .call(applyTransform, this, {}, ox, oy) + .call(applyTransform, this, {}, ox, 0) .call((g) => g.append("path").call(applyDirectStyles, this).call(applyChannelStyles, this, channels).attr("d", d)) .node(); } diff --git a/src/transforms/hexbin.js b/src/transforms/hexbin.js index 51078eb708..5fec7ed6b3 100644 --- a/src/transforms/hexbin.js +++ b/src/transforms/hexbin.js @@ -5,13 +5,17 @@ import {sqrt3} from "../symbol.js"; import {initializer} from "./basic.js"; import {hasOutput, maybeGroup, maybeGroupOutputs, maybeSubgroup} from "./group.js"; -// We don’t want the hexagons to align with the edges of the plot frame, as that -// would cause extreme x-values (the upper bound of the default x-scale domain) -// to be rounded up into a floating bin to the right of the plot. Therefore, -// rather than centering the origin hexagon around ⟨0,0⟩ in screen coordinates, -// we offset slightly to ⟨0.5,0⟩. The hexgrid mark uses the same origin. -export const ox = 0.5 - offset; -export const oy = -offset; +// When a data value lands exactly on a hexbin grid boundary (i.e., the scaled +// x-coordinate is a half-integer due to the odd-row offset), Math.round would +// round up into a floating bin outside the plot. We use a custom rounding +// function that breaks such ties toward the center of the plot, preventing +// exterior bins on left and right edges. +export const ox = -offset; + +// Rounds x to the nearest integer, breaking .5 ties toward center. +function round(x, center) { + return Math.round(center + (x - center) * (1 - 1e-12)); +} export function hexbin(outputs = {fill: "count"}, {binWidth, ...options} = {}) { const {z} = options; @@ -31,7 +35,7 @@ export function hexbin(outputs = {fill: "count"}, {binWidth, ...options} = {}) { if (options.symbol === undefined) options.symbol = "hexagon"; if (options.r === undefined && !hasOutput(outputs, "r")) options.r = binWidth / 2; - return initializer(options, (data, facets, channels, scales, _, context) => { + return initializer(options, (data, facets, channels, scales, dimensions, context) => { let {x: X, y: Y, z: Z, fill: F, stroke: S, symbol: Q} = channels; if (X === undefined) throw new Error("missing channel: x"); if (Y === undefined) throw new Error("missing channel: y"); @@ -39,6 +43,11 @@ export function hexbin(outputs = {fill: "count"}, {binWidth, ...options} = {}) { // Get the (either scaled or projected) xy channels. ({x: X, y: Y} = applyPosition(channels, scales, context)); + // Compute the horizontal midpoint of the frame in pixel space; used by + // hbin to break rounding ties toward the center, preventing exterior bins. + const {marginRight, marginLeft, width} = dimensions; + const mx = (marginLeft + width - marginRight) / 2; + // Extract the values for channels that are eligible for grouping; not all // marks define a z channel, so compute one if it not already computed. If z // was explicitly set to null, ensure that we don’t subdivide bins. @@ -65,7 +74,7 @@ export function hexbin(outputs = {fill: "count"}, {binWidth, ...options} = {}) { const binFacet = []; for (const o of outputs) o.scope("facet", facet); for (const [f, I] of maybeGroup(facet, G)) { - for (const {index: b, extent} of hbin(data, I, X, Y, binWidth)) { + for (const {index: b, extent} of hbin(data, I, X, Y, binWidth, mx)) { binFacet.push(++i); BX.push(extent.x); BY.push(extent.y); @@ -106,15 +115,16 @@ export function hexbin(outputs = {fill: "count"}, {binWidth, ...options} = {}) { }); } -function hbin(data, I, X, Y, dx) { +function hbin(data, I, X, Y, dx, mx) { const dy = dx * (1.5 / sqrt3); + const cx = (mx - ox) / dx; const bins = new Map(); for (const i of I) { let px = X[i], py = Y[i]; if (isNaN(px) || isNaN(py)) continue; - let pj = Math.round((py = (py - oy) / dy)), - pi = Math.round((px = (px - ox) / dx - (pj & 1) / 2)), + let pj = Math.round((py = py / dy)), + pi = round((px = (px - ox) / dx - (pj & 1) / 2), cx - (pj & 1) / 2), py1 = py - pj; if (Math.abs(py1) * 3 > 1) { let px1 = px - pi, @@ -127,7 +137,7 @@ function hbin(data, I, X, Y, dx) { const key = `${pi},${pj}`; let bin = bins.get(key); if (bin === undefined) { - bin = {index: [], extent: {data, x: (pi + (pj & 1) / 2) * dx + ox, y: pj * dy + oy}}; + bin = {index: [], extent: {data, x: (pi + (pj & 1) / 2) * dx + ox, y: pj * dy}}; bins.set(key, bin); } bin.index.push(i); diff --git a/test/output/carsHexbin.html b/test/output/carsHexbin.html index 581c029b00..1d5ea9fecb 100644 --- a/test/output/carsHexbin.html +++ b/test/output/carsHexbin.html @@ -94,134 +94,132 @@ displacement (cc) → - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/crosshairHexbin.svg b/test/output/crosshairHexbin.svg index 201691eb45..a918618fa2 100644 --- a/test/output/crosshairHexbin.svg +++ b/test/output/crosshairHexbin.svg @@ -62,245 +62,246 @@ weight → - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/output/hexbin.svg b/test/output/hexbin.svg index 17761d3dea..3f6eb75a8b 100644 --- a/test/output/hexbin.svg +++ b/test/output/hexbin.svg @@ -73,201 +73,203 @@ - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/hexbinEdge.svg b/test/output/hexbinEdge.svg new file mode 100644 index 0000000000..4c63afccd6 --- /dev/null +++ b/test/output/hexbinEdge.svg @@ -0,0 +1,500 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/hexbinFillX.svg b/test/output/hexbinFillX.svg index 1723fcc7ea..33c4c8bcb8 100644 --- a/test/output/hexbinFillX.svg +++ b/test/output/hexbinFillX.svg @@ -73,201 +73,203 @@ - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/hexbinIdentityReduce.svg b/test/output/hexbinIdentityReduce.svg index d3e27c2d03..5c8944d55f 100644 --- a/test/output/hexbinIdentityReduce.svg +++ b/test/output/hexbinIdentityReduce.svg @@ -77,321 +77,322 @@ - + - A - A - A - A - A - A,A - A - A - A - A - A - A,C - A - A - A - A - A - A - A,G - A - A,A - A - A,A - A - A - A - A - A - A - A - A,A - A - A,A - A,A - A - A - A - A - A - A - A - A - A - A - A - A,A - A,A - A - A - A - A - A - A - A - A - A - A,A - A - A,A - A - A - A - A - A - A - A - A - A,A - A,A - A - A - A - A,A - A - A - A - A - A - A - A - A - A - A,A,A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - A - C - C - C - C,C - C - C - C - C - C - C - C - C - C - C - C,C - C - C - C - C - C - C - C - C - C - C - C - C - C - C - C - C - C,C - C - C - C - C - C - C - C - C - C - C - C - C - C - C - C - C - C - C - C - C - C - C - C - C - C - C - C - C - C - C - C - C - G - G,G,G - G - G - G - G - G,G - G - G - G - G - G - G - G - G - G - G - G,G - G - G - G,G - G - G - G - G - G - G - G - G - G - G,G - G - G - G - G - G - G - G - G - G - G - G,G - G - G - G - G - G - G,G,G - G - G - G - G - G - G - G - G - G - G - G - G - G - G - G - G - G - G - G - G - G - G - G - G - G - G - G - G,G - G - G - G - G - G - G - G - G - G - G - G - G,G - G - G - G - G - G - G - G,G - G - G - G - G - G - G - G - G - G - G - G - G - G - G - G + A + A + A + A + A + A,A + A + A + A + A + A + A,C + A + A + A + A + A + A + A,G + A + A + A + A,A + A + A + A + A + A,A + A + A + A,A + A + A,A + A,A + A + A + A + A + A + A + A + A + A + A + A + A,A + A,A + A + A + A + A + A + A + A + A + A + A,A + A,A + A,A + A + A + A + A + A + A + A + A + A + A,A + A,A + A + A + A + A + A + A + A + A + A + A + A + A + A + A,A,A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + A + C + C + C + C,C + C + C + C + C + C + C + C + C + C + C + C,C + C + C + C + C + C + C + C + C + C + C + C + C + C + C + C + C + C,C + C + C + C + C + C + C + C + C + C + C + C + C + C + C + C + C + C + C + C + C + C + C + C + C + C + C + C + C + C + C + C + C + G + G,G,G + G + G + G + G + G,G + G + G + G + G + G + G + G + G + G + G + G,G + G + G + G,G + G + G + G + G + G + G + G + G + G + G,G + G + G + G + G + G + G + G + G + G + G + G,G + G + G + G + G + G + G,G,G + G + G + G + G + G + G + G + G + G + G + G + G + G + G + G + G + G + G + G + G + G + G + G + G + G + G + G + G,G + G + G + G + G + G + G + G + G + G + G + G + G,G + G + G + G + G + G + G + G + G + G + G + G + G + G + G + G + G + G + G + G + G + G + G + G \ No newline at end of file diff --git a/test/output/hexbinOranges.svg b/test/output/hexbinOranges.svg index d0792f3252..6961b3f2f4 100644 --- a/test/output/hexbinOranges.svg +++ b/test/output/hexbinOranges.svg @@ -71,194 +71,192 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/hexbinR.html b/test/output/hexbinR.html index c203ea8d6a..58d0a90faa 100644 --- a/test/output/hexbinR.html +++ b/test/output/hexbinR.html @@ -132,173 +132,173 @@ - - + + - - + + - - + + - 9 - 8 - 8 - 8 - 6 - 6 - 6 - 5 - 5 - 5 - 5 - 4 - 4 - 4 - 3 - 3 - 3 - 3 - 3 - 3 - 3 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 + 9 + 9 + 8 + 7 + 6 + 6 + 5 + 5 + 5 + 5 + 5 + 4 + 4 + 4 + 4 + 3 + 3 + 3 + 3 + 3 + 3 + 3 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 - 11 - 9 - 8 - 7 - 5 - 5 - 5 - 4 - 4 - 4 - 4 - 4 - 4 - 4 - 4 - 3 - 3 - 3 - 3 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 + 11 + 9 + 8 + 7 + 5 + 5 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 3 + 3 + 3 + 3 + 3 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 - 2 - 1 - 1 - 1 - 1 - 1 - 1 - 1 + 2 + 1 + 1 + 1 + 1 + 1 + 1 + 1 \ No newline at end of file diff --git a/test/output/hexbinSymbol.html b/test/output/hexbinSymbol.html index 0e0fe5f630..6cb07e96e5 100644 --- a/test/output/hexbinSymbol.html +++ b/test/output/hexbinSymbol.html @@ -128,226 +128,227 @@ culmen_depth_mm → - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/hexbinText.svg b/test/output/hexbinText.svg index 6d90b51ff8..af288e0b3c 100644 --- a/test/output/hexbinText.svg +++ b/test/output/hexbinText.svg @@ -98,289 +98,289 @@ - - + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - 4 - 5 - 2 - 6 - 1 - 7 - 3 - 2 - 4 - 6 - 3 - 8 - 1 - 7 - 4 - 3 - 1 - 2 - 1 - 2 - 1 - 1 - 5 - 1 - 2 - 2 - 1 - 5 - 1 - 3 - 2 - 1 - 2 - 1 - 2 - 2 - 1 - 1 - 1 - 1 - 4 - 7 - 7 - 3 - 1 - 10 - 3 - 1 - 2 - 4 - 6 - 2 - 3 - 1 - 1 - 1 - 1 + 4 + 5 + 2 + 6 + 1 + 7 + 3 + 2 + 4 + 6 + 3 + 8 + 1 + 7 + 4 + 3 + 1 + 2 + 1 + 2 + 1 + 1 + 5 + 1 + 2 + 2 + 1 + 5 + 1 + 3 + 2 + 1 + 2 + 1 + 2 + 2 + 1 + 1 + 1 + 1 + 4 + 6 + 7 + 3 + 1 + 10 + 3 + 1 + 2 + 4 + 7 + 2 + 3 + 1 + 1 + 1 + 1 - 16 - 1 - 5 - 2 - 1 - 3 - 1 - 3 - 3 - 1 - 1 - 1 - 1 - 5 - 3 - 7 - 4 - 2 - 1 - 3 - 1 - 2 - 1 - 1 - 1 - 3 - 6 - 7 - 4 - 4 - 1 - 1 - 1 - 3 - 1 - 1 - 2 - 1 - 1 - 1 - 6 - 6 - 2 - 4 - 3 - 7 - 8 - 7 - 2 - 1 - 1 - 1 - 1 - 1 - 1 - 2 - 2 - 1 - 2 - 1 - 1 - 1 + 15 + 1 + 2 + 2 + 1 + 3 + 1 + 3 + 4 + 1 + 4 + 3 + 1 + 4 + 3 + 8 + 4 + 1 + 3 + 1 + 1 + 2 + 1 + 1 + 3 + 5 + 7 + 4 + 4 + 1 + 1 + 1 + 1 + 2 + 1 + 1 + 2 + 2 + 1 + 1 + 7 + 6 + 2 + 4 + 3 + 7 + 7 + 7 + 2 + 1 + 1 + 1 + 1 + 1 + 1 + 2 + 2 + 1 + 2 + 1 + 1 + 1 - 1 - 1 - 2 - 1 - 1 - 1 - 1 - 1 + 1 + 1 + 2 + 1 + 1 + 1 + 1 + 1 \ No newline at end of file diff --git a/test/output/hexbinZ.html b/test/output/hexbinZ.html index e1d589f7de..4a210556c5 100644 --- a/test/output/hexbinZ.html +++ b/test/output/hexbinZ.html @@ -88,193 +88,194 @@ - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/hexbinZNull.svg b/test/output/hexbinZNull.svg index f5ef0635dc..ebca9f2139 100644 --- a/test/output/hexbinZNull.svg +++ b/test/output/hexbinZNull.svg @@ -73,200 +73,198 @@ - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/penguinCulmenVoronoiExcludeHex.svg b/test/output/penguinCulmenVoronoiExcludeHex.svg index 465be539b5..8c07f97977 100644 --- a/test/output/penguinCulmenVoronoiExcludeHex.svg +++ b/test/output/penguinCulmenVoronoiExcludeHex.svg @@ -102,209 +102,205 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + diff --git a/test/output/penguinDodgeHexbin.svg b/test/output/penguinDodgeHexbin.svg index 6865e554cc..70ab5eea7a 100644 --- a/test/output/penguinDodgeHexbin.svg +++ b/test/output/penguinDodgeHexbin.svg @@ -435,351 +435,351 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/penguinHexbinColorExplicit.svg b/test/output/penguinHexbinColorExplicit.svg index 0af1406d68..3a33da37ec 100644 --- a/test/output/penguinHexbinColorExplicit.svg +++ b/test/output/penguinHexbinColorExplicit.svg @@ -95,195 +95,197 @@ culmen_depth_mm → - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/tipHexbin.svg b/test/output/tipHexbin.svg index 00d6342c03..8fa9004762 100644 --- a/test/output/tipHexbin.svg +++ b/test/output/tipHexbin.svg @@ -62,245 +62,246 @@ weight → - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/tipHexbinExplicit.svg b/test/output/tipHexbinExplicit.svg index 17b8242105..a9e76f73ce 100644 --- a/test/output/tipHexbinExplicit.svg +++ b/test/output/tipHexbinExplicit.svg @@ -62,245 +62,246 @@ weight → - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/walmarts.html b/test/output/walmarts.html index 6ef7797eef..4b953bbc15 100644 --- a/test/output/walmarts.html +++ b/test/output/walmarts.html @@ -51,655 +51,654 @@ - 1978-09-05 - 1992-06-02 - 1983-10-18 - 1983-10-04 - 1993-02-02 - 1989-04-03 - 1990-09-04 - 1977-07-01 - 1993-01-05 - 1970-11-01 - 1982-09-21 - 1986-03-04 - 1990-11-14 - 1992-04-01 - 1992-09-01 - 1992-09-01 - 1982-10-05 - 1991-07-02 - 1983-10-18 - 1989-02-02 - 1991-09-11 - 1992-08-04 - 1979-08-21 - 1981-09-29 - 1981-07-04 - 1989-08-31 - 1990-10-01 - 1991-09-11 - 1974-07-01 - 1992-08-04 - 1993-02-02 - 1983-03-01 - 1985-12-31 - 1988-08-16 - 1995-08-22 - 1975-07-01 - 1980-04-15 - 1985-10-22 - 1988-06-30 - 1989-10-31 - 1967-10-01 - 1974-10-01 - 1979-11-20 - 1987-05-12 - 1991-06-04 - 1994-01-04 - 1979-10-30 - 1980-08-12 - 1983-11-29 - 1981-07-04 - 1981-07-04 - 1981-07-04 - 1986-03-18 - 1987-05-12 - 1990-12-03 - 1990-05-30 - 1990-10-29 - 1991-11-05 - 1968-11-01 - 1971-11-01 - 1979-03-06 - 1980-09-30 - 1980-11-18 - 1981-07-04 - 1981-07-04 - 1984-02-01 - 1981-07-04 - 1985-07-16 - 1987-06-02 - 1988-06-30 - 1989-04-03 - 1989-10-31 - 1990-05-30 - 1990-06-27 - 1991-04-02 - 1991-11-05 - 1992-08-04 - 1994-10-18 - 1962-07-01 - 1969-04-01 - 1971-09-01 - 1983-08-02 - 1983-11-29 - 1984-08-21 - 1981-07-04 - 1990-01-31 - 1989-11-16 - 1990-10-29 - 1990-08-01 - 1991-11-05 - 1992-02-04 - 1972-11-01 - 1974-04-01 - 1975-02-01 - 1975-08-01 - 1979-07-10 - 1981-07-04 - 1983-05-17 - 1981-07-04 - 1981-07-04 - 1981-07-04 - 1984-10-16 - 1986-08-19 - 1988-03-01 - 1989-04-03 - 1989-12-30 - 1990-01-31 - 1991-01-30 - 1991-11-05 - 1991-06-04 - 1991-11-05 - 1992-02-04 - 1992-09-30 - 1993-03-02 - 1993-06-01 - 1970-11-01 - 1976-07-01 - 1979-10-30 - 1979-10-30 - 1981-07-04 - 1981-11-03 - 1981-07-04 - 1981-07-04 - 1981-07-04 - 1983-05-17 - 1984-10-16 - 1983-07-01 - 1985-11-12 - 1981-07-04 - 1984-10-23 - 1984-10-16 - 1985-06-04 - 1986-04-29 - 1986-08-19 - 1986-09-16 - 1987-03-31 - 1988-09-01 - 1988-11-17 - 1989-11-16 - 1990-01-31 - 1991-10-01 - 1991-10-01 - 1992-08-04 - 1992-09-30 - 1992-08-04 - 1993-03-02 - 1965-08-01 - 1967-10-01 - 1971-02-01 - 1971-08-01 - 1971-11-01 - 1972-07-01 - 1972-11-01 - 1974-08-01 - 1975-11-01 - 1978-03-14 - 1977-07-01 - 1977-07-01 - 1978-03-28 - 1978-05-16 - 1979-11-13 - 1980-07-29 - 1981-02-10 - 1980-10-14 - 1981-03-31 - 1982-10-05 - 1982-11-16 - 1982-11-16 - 1981-07-04 - 1984-08-02 - 1981-07-04 - 1983-05-17 - 1981-07-04 - 1981-07-04 - 1981-07-04 - 1985-02-05 - 1984-05-01 - 1986-06-10 - 1986-09-09 - 1986-11-18 - 1988-03-08 - 1989-08-01 - 1989-02-02 - 1989-04-03 - 1989-06-29 - 1989-11-16 - 1989-12-30 - 1991-01-30 - 1992-02-04 - 1991-11-05 - 1991-11-05 - 1992-08-04 - 1993-10-26 - 1993-10-19 - 1983-08-16 - 1968-03-01 - 1968-07-01 - 1969-04-01 - 1971-12-09 - 1972-02-01 - 1972-06-01 - 1974-07-01 - 1974-08-01 - 1976-04-01 - 1979-06-01 - 1979-02-13 - 1977-07-01 - 1979-03-27 - 1979-07-17 - 1979-06-26 - 1979-08-21 - 1980-02-26 - 1979-09-25 - 1981-02-10 - 1981-06-02 - 1980-11-18 - 1981-08-04 - 1982-05-18 - 1982-10-05 - 1983-07-01 - 1983-05-17 - 1981-07-04 - 1983-11-29 - 1981-07-04 - 1981-07-04 - 1985-08-30 - 1986-03-11 - 1988-03-08 - 1988-02-02 - 1989-06-01 - 1989-12-30 - 1990-12-03 - 1990-08-01 - 1991-01-30 - 1992-06-02 - 1991-11-05 - 1992-08-04 - 1992-03-03 - 1992-06-30 - 1992-09-30 - 1992-11-02 - 1993-02-02 - 1993-10-26 - 1993-11-02 - 1994-01-04 - 1994-07-26 - 1998-01-26 - 1964-08-01 - 1968-03-01 - 1972-10-01 - 1971-06-01 - 1972-10-01 - 1975-06-01 - 1975-02-01 - 1975-04-01 - 1975-11-01 - 1975-07-01 - 1976-06-01 - 1977-02-01 - 1977-02-01 - 1979-10-29 - 1979-11-27 - 1980-07-01 - 1980-11-11 - 1982-08-03 - 1982-04-20 - 1983-05-03 - 1983-06-07 - 1983-08-16 - 1984-03-06 - 1981-07-04 - 1985-01-22 - 1984-10-16 - 1985-07-02 - 1986-01-21 - 1985-07-02 - 1986-09-02 - 1985-08-20 - 1985-11-12 - 1985-10-29 - 1985-10-22 - 1986-02-04 - 1986-07-15 - 1986-09-16 - 1986-11-18 - 1987-09-01 - 1987-08-04 - 1988-06-02 - 1989-10-02 - 1989-09-16 - 1989-10-31 - 1989-08-01 - 1990-01-31 - 1991-01-30 - 1990-08-01 - 1991-01-30 - 1991-04-02 - 1991-01-30 - 1992-06-30 - 1993-01-05 - 1993-02-02 - 1993-02-02 - 1993-03-31 - 1993-06-01 - 1995-01-03 - 1995-01-03 - 1996-05-29 - 1997-01-29 - 1969-11-01 - 1970-10-01 - 1970-03-01 - 1971-02-01 - 1971-10-01 - 1971-11-01 - 1982-08-17 - 1974-08-01 - 1974-07-01 - 1975-06-01 - 1976-04-01 - 1976-10-01 - 1977-03-01 - 1977-03-01 - 1977-06-01 - 1977-04-01 - 1985-05-21 - 1979-08-07 - 1978-03-21 - 1979-05-15 - 1980-10-13 - 1981-12-01 - 1981-07-04 - 1982-08-31 - 1982-08-31 - 1984-03-06 - 1982-11-02 - 1985-05-14 - 1983-07-01 - 1983-10-04 - 1981-07-04 - 1983-10-04 - 1984-08-31 - 1981-07-04 - 1981-07-04 - 1984-10-02 - 1984-06-05 - 1984-04-03 - 1985-01-22 - 1985-07-16 - 1985-09-10 - 1985-10-08 - 1985-07-16 - 1985-12-31 - 1985-11-12 - 1986-06-17 - 1986-11-18 - 1987-03-03 - 1988-02-02 - 1988-08-16 - 1989-06-01 - 1989-02-02 - 1989-06-01 - 1989-08-31 - 1989-08-01 - 1989-12-30 - 1989-08-01 - 1989-11-16 - 1989-10-31 - 1991-10-01 - 1990-06-27 - 1990-10-29 - 1990-10-29 - 1991-01-30 - 1991-01-30 - 1991-06-04 - 1992-02-04 - 1992-06-02 - 1992-08-04 - 1992-08-04 - 1993-03-02 - 1992-11-02 - 1993-01-05 - 1993-04-30 - 1993-10-26 - 1993-10-26 - 1993-10-26 - 1993-07-27 - 1994-01-04 - 1994-08-31 - 1997-01-29 - 1995-05-31 - 1971-06-01 - 1972-05-01 - 1973-08-01 - 1974-09-01 - 1975-11-01 - 1976-02-01 - 1976-04-01 - 1976-09-01 - 1977-10-01 - 1977-11-01 - 1977-07-01 - 1978-09-12 - 1978-10-10 - 1980-11-18 - 1980-11-18 - 1984-10-30 - 1981-03-03 - 1981-07-28 - 1981-11-03 - 1982-05-31 - 1983-05-03 - 1982-09-21 - 1983-05-03 - 1983-06-07 - 1983-07-01 - 1984-08-31 - 1983-11-15 - 1984-10-02 - 1985-02-05 - 1981-07-04 - 1985-02-05 - 1981-07-04 - 1985-05-14 - 1984-11-13 - 1985-07-16 - 1985-04-30 - 1985-08-30 - 1985-06-04 - 1985-07-16 - 1985-10-16 - 1985-07-02 - 1985-09-17 - 1986-03-05 - 1987-03-03 - 1988-04-12 - 1989-02-02 - 1988-10-11 - 1989-02-02 - 1989-02-02 - 1989-08-01 - 1989-02-02 - 1989-06-01 - 1990-01-31 - 1990-04-02 - 1990-05-30 - 1990-08-01 - 1990-01-31 - 1990-04-30 - 1990-06-27 - 1990-12-31 - 1990-04-02 - 1990-10-29 - 1990-12-03 - 1990-12-31 - 1990-12-03 - 1991-04-30 - 1991-07-02 - 1991-01-30 - 1991-07-31 - 1991-04-02 - 1991-11-05 - 1991-11-05 - 1991-11-05 - 1992-09-01 - 1992-11-02 - 1992-11-02 - 1993-01-05 - 1992-09-30 - 1992-09-30 - 1993-01-05 - 1992-11-02 - 1993-04-30 - 1994-01-04 - 1994-01-04 - 1993-10-19 - 1993-10-26 - 1994-10-26 - 1995-03-21 - 1994-10-26 - 1995-06-28 - 1995-11-01 - 1995-12-30 - 1995-12-28 - 1997-06-18 - 2000-04-19 - 1976-08-01 - 1976-10-01 - 1977-11-01 - 1978-09-19 - 1981-03-10 - 1982-08-17 - 1984-04-03 - 1982-11-16 - 1982-08-17 - 1983-08-02 - 1983-10-16 - 1984-10-16 - 1984-07-17 - 1984-04-03 - 1984-08-02 - 1984-10-30 - 1981-07-04 - 1985-04-30 - 1985-07-16 - 1985-07-02 - 1985-07-02 - 1985-10-01 - 1986-03-04 - 1986-03-05 - 1986-03-05 - 1986-01-21 - 1986-03-04 - 1986-03-11 - 1986-06-03 - 1986-07-15 - 1986-03-18 - 1986-07-08 - 1986-03-05 - 1986-03-11 - 1986-09-16 - 1986-08-05 - 1987-02-03 - 1986-09-16 - 1986-09-09 - 1987-02-03 - 1987-04-28 - 1987-07-14 - 1988-03-01 - 1988-05-03 - 1988-11-01 - 1988-04-07 - 1988-05-03 - 1988-11-01 - 1988-10-03 - 1989-04-03 - 1989-05-02 - 1989-02-02 - 1989-06-01 - 1989-06-01 - 1989-10-31 - 1990-01-31 - 1989-12-30 - 1990-01-31 - 1990-04-02 - 1990-01-31 - 1990-01-31 - 1990-04-02 - 1990-08-01 - 1991-01-30 - 1990-08-01 - 1990-06-27 - 1990-08-01 - 1990-08-01 - 1991-01-30 - 1990-08-01 - 1990-10-29 - 1990-10-01 - 1990-12-03 - 1990-10-29 - 1990-10-29 - 1990-10-01 - 1990-12-31 - 1990-12-03 - 1990-11-14 - 1990-12-03 - 1991-01-30 - 1991-01-30 - 1991-01-30 - 1991-01-30 - 1991-11-05 - 1991-04-02 - 1991-04-02 - 1991-04-02 - 1991-07-02 - 1991-07-31 - 1991-12-31 - 1992-03-03 - 1992-03-03 - 1992-04-01 - 1992-09-30 - 1992-09-01 - 1992-11-02 - 1993-01-05 - 1992-11-02 - 1992-11-25 - 1993-01-05 - 1992-11-02 - 1992-11-02 - 1993-01-05 - 1993-02-02 - 1993-06-30 - 1993-02-02 - 1992-11-02 - 1993-03-31 - 1993-04-30 - 1993-03-31 - 1993-04-30 - 1993-08-31 - 1994-01-04 - 1993-06-01 - 1993-08-31 - 1993-10-26 - 1994-05-17 - 1994-03-30 - 1994-01-25 - 1995-01-03 - 1994-09-27 - 1994-03-22 - 1994-10-26 - 1994-03-30 - 1995-12-30 - 1995-01-03 - 1998-07-15 - 1997-01-29 - 1995-11-01 - 1998-08-19 - 1996-08-28 - 1996-06-26 - 1996-04-02 - 2001-01-24 - 1996-10-29 - 1998-06-17 - 1996-07-23 - 1996-10-29 - 1997-01-29 - 1998-01-26 - 1998-01-26 - 1998-01-26 - 1999-01-27 - 1998-10-14 - 1998-10-14 - 2000-08-16 - 2000-08-16 - 2000-01-26 - 2000-08-16 - 2000-06-14 - 2001-02-28 - 2002-02-20 - 2002-02-20 - 2004-01-21 - 2005-09-14 - 2004-05-19 - 2003-05-21 - 2003-08-20 - 2004-01-21 - 2004-01-21 - 2003-10-29 - 2004-10-27 - 2005-05-18 - 2005-01-26 + 1978-09-05 + 1992-06-02 + 1983-10-18 + 1993-02-02 + 1983-10-04 + 1989-04-03 + 1977-07-01 + 1992-09-01 + 1981-09-01 + 1990-09-04 + 1993-01-05 + 1986-03-04 + 1992-04-01 + 1992-09-01 + 1970-11-01 + 1990-11-14 + 1982-09-21 + 1991-07-02 + 1983-10-18 + 1991-09-11 + 1989-02-02 + 1992-08-04 + 1981-09-29 + 1981-07-04 + 1992-08-04 + 1991-09-11 + 1974-07-01 + 1979-08-21 + 1983-03-01 + 1988-08-16 + 1993-06-01 + 1985-12-31 + 1989-10-31 + 1990-10-01 + 1995-08-22 + 1975-07-01 + 1980-04-15 + 1988-03-01 + 1989-08-31 + 1967-10-01 + 1968-11-01 + 1974-10-01 + 1979-11-20 + 1986-01-21 + 1991-06-04 + 1994-01-04 + 1979-10-30 + 1980-08-12 + 1983-11-29 + 1981-07-04 + 1981-07-04 + 1981-07-04 + 1985-10-22 + 1987-05-12 + 1987-05-12 + 1990-05-30 + 1990-10-29 + 1990-10-29 + 1991-11-05 + 1980-09-30 + 1980-11-18 + 1983-11-29 + 1984-02-01 + 1981-07-04 + 1985-07-16 + 1987-06-02 + 1988-06-30 + 1989-10-31 + 1990-01-31 + 1990-12-03 + 1989-11-16 + 1990-05-30 + 1990-06-27 + 1991-04-02 + 1991-11-05 + 1991-11-05 + 1992-08-04 + 1994-10-18 + 1962-07-01 + 1969-04-01 + 1971-09-01 + 1974-04-01 + 1975-02-01 + 1979-03-06 + 1983-08-02 + 1981-07-04 + 1981-07-04 + 1984-08-21 + 1981-07-04 + 1989-04-03 + 1989-04-03 + 1990-08-01 + 1991-11-05 + 1992-02-04 + 1992-02-04 + 1993-06-01 + 1971-05-01 + 1975-08-01 + 1979-09-25 + 1981-07-04 + 1981-11-03 + 1983-05-17 + 1981-07-04 + 1981-07-04 + 1984-10-16 + 1984-10-16 + 1986-01-21 + 1986-08-19 + 1988-03-01 + 1989-08-01 + 1990-01-31 + 1991-01-30 + 1991-11-05 + 1991-06-04 + 1970-11-01 + 1972-11-01 + 1972-11-01 + 1975-11-01 + 1976-07-01 + 1979-10-30 + 1979-10-30 + 1980-07-29 + 1981-02-10 + 1981-03-31 + 1981-07-04 + 1981-07-04 + 1981-07-04 + 1981-07-04 + 1981-07-04 + 1984-10-16 + 1983-07-01 + 1985-11-12 + 1981-07-04 + 1984-10-23 + 1981-07-04 + 1985-06-04 + 1986-04-29 + 1986-08-19 + 1986-11-18 + 1987-03-31 + 1988-09-01 + 1989-02-02 + 1989-11-16 + 1990-10-29 + 1991-10-01 + 1991-10-01 + 1992-09-30 + 1992-08-04 + 1993-03-02 + 1992-09-30 + 1983-08-16 + 1965-08-01 + 1967-10-01 + 1968-07-01 + 1971-02-01 + 1971-11-01 + 1972-07-01 + 1974-07-01 + 1974-08-01 + 1978-03-14 + 1978-03-28 + 1978-05-16 + 1978-06-13 + 1979-11-13 + 1979-09-25 + 1980-10-14 + 1982-10-05 + 1981-07-04 + 1982-11-16 + 1982-11-16 + 1981-07-04 + 1984-08-02 + 1983-05-17 + 1983-05-17 + 1981-07-04 + 1981-07-04 + 1985-02-05 + 1984-05-01 + 1986-06-10 + 1986-09-09 + 1988-03-08 + 1988-11-17 + 1989-04-03 + 1989-06-29 + 1989-12-30 + 1990-01-31 + 1991-01-30 + 1992-02-04 + 1991-11-05 + 1991-11-05 + 1993-03-02 + 1994-03-30 + 1968-03-01 + 1969-04-01 + 1969-11-01 + 1971-08-01 + 1971-12-09 + 1972-06-01 + 1974-08-01 + 1976-04-01 + 1979-06-01 + 1979-02-13 + 1977-07-01 + 1977-07-01 + 1977-07-01 + 1979-07-17 + 1979-06-26 + 1980-02-26 + 1979-11-27 + 1981-02-10 + 1980-11-18 + 1981-08-04 + 1982-05-18 + 1982-10-05 + 1983-07-01 + 1983-05-17 + 1983-11-29 + 1981-07-04 + 1981-07-04 + 1985-08-30 + 1986-03-11 + 1988-03-08 + 1988-02-02 + 1989-06-01 + 1989-08-31 + 1989-10-31 + 1989-12-30 + 1990-06-27 + 1990-12-03 + 1991-01-30 + 1991-04-02 + 1992-06-02 + 1991-11-05 + 1992-08-04 + 1992-03-03 + 1992-06-30 + 1992-08-04 + 1992-09-30 + 1992-11-02 + 1993-02-02 + 1993-10-26 + 1994-01-04 + 1994-07-26 + 1998-01-26 + 1997-01-29 + 1972-10-01 + 1970-03-01 + 1971-06-01 + 1972-10-01 + 1974-02-01 + 1975-06-01 + 1975-02-01 + 1975-11-01 + 1975-07-01 + 1977-02-01 + 1977-02-01 + 1979-10-29 + 1979-08-21 + 1980-07-01 + 1980-11-11 + 1982-08-03 + 1981-06-02 + 1982-04-20 + 1982-11-02 + 1983-05-03 + 1981-07-04 + 1981-07-04 + 1983-06-07 + 1981-07-04 + 1984-03-06 + 1981-07-04 + 1985-01-22 + 1984-10-16 + 1985-07-02 + 1986-01-21 + 1985-07-02 + 1986-09-02 + 1985-11-12 + 1985-10-29 + 1985-10-22 + 1986-02-04 + 1986-07-15 + 1986-09-16 + 1986-11-18 + 1987-09-01 + 1987-08-04 + 1988-06-02 + 1989-10-02 + 1989-09-16 + 1989-08-01 + 1990-01-31 + 1989-12-30 + 1990-10-29 + 1991-01-30 + 1990-08-01 + 1990-08-01 + 1991-01-30 + 1991-04-02 + 1991-01-30 + 1992-02-04 + 1992-06-30 + 1993-01-05 + 1993-02-02 + 1993-02-02 + 1993-03-31 + 1993-06-01 + 1993-10-26 + 1993-11-02 + 1995-01-03 + 1995-01-03 + 1996-05-29 + 1964-08-01 + 1968-03-01 + 1970-10-01 + 1971-02-01 + 1971-10-01 + 1971-11-01 + 1982-08-17 + 1974-08-01 + 1974-07-01 + 1975-04-01 + 1975-06-01 + 1976-06-01 + 1976-10-01 + 1977-03-01 + 1977-03-01 + 1977-06-01 + 1977-04-01 + 1977-10-01 + 1985-05-21 + 1979-08-07 + 1978-09-12 + 1979-05-15 + 1980-10-13 + 1981-12-01 + 1981-07-04 + 1982-08-31 + 1982-08-31 + 1984-03-06 + 1985-05-14 + 1983-08-16 + 1983-07-01 + 1981-07-04 + 1983-10-04 + 1981-07-04 + 1983-10-04 + 1984-10-02 + 1984-06-05 + 1984-04-03 + 1985-01-22 + 1985-07-16 + 1985-09-10 + 1985-10-08 + 1985-07-16 + 1985-12-31 + 1985-08-20 + 1985-11-12 + 1986-06-17 + 1986-11-18 + 1987-03-03 + 1988-08-16 + 1989-06-01 + 1989-06-01 + 1989-08-01 + 1989-12-30 + 1989-08-01 + 1989-11-16 + 1991-10-01 + 1991-01-30 + 1990-10-29 + 1991-01-30 + 1991-01-30 + 1991-06-04 + 1991-01-30 + 1992-06-02 + 1992-08-04 + 1992-08-04 + 1993-03-02 + 1992-11-02 + 1993-01-05 + 1993-04-30 + 1993-10-26 + 1993-10-26 + 1993-10-26 + 1993-07-27 + 1994-01-04 + 1995-01-25 + 1997-01-29 + 1995-05-31 + 1971-06-01 + 1972-05-01 + 1973-08-01 + 1974-09-01 + 1975-11-01 + 1976-02-01 + 1976-04-01 + 1976-04-01 + 1976-09-01 + 1976-10-01 + 1977-11-01 + 1977-07-01 + 1978-03-21 + 1980-11-18 + 1980-11-18 + 1981-03-03 + 1981-07-28 + 1982-05-31 + 1983-05-03 + 1982-09-21 + 1983-05-03 + 1983-06-07 + 1984-08-31 + 1983-11-15 + 1984-08-31 + 1984-10-02 + 1985-02-05 + 1985-02-05 + 1981-07-04 + 1984-11-13 + 1985-07-16 + 1985-04-30 + 1985-08-30 + 1985-06-04 + 1985-07-16 + 1985-07-02 + 1985-09-17 + 1986-03-04 + 1986-03-05 + 1988-02-02 + 1988-04-12 + 1988-11-01 + 1988-04-07 + 1989-02-02 + 1988-10-11 + 1989-02-02 + 1989-02-02 + 1989-08-01 + 1989-02-02 + 1989-06-01 + 1989-10-31 + 1990-01-31 + 1991-11-04 + 1990-04-02 + 1990-05-30 + 1990-08-01 + 1990-01-31 + 1990-04-30 + 1990-06-27 + 1990-12-31 + 1990-04-02 + 1990-10-29 + 1990-12-03 + 1990-12-31 + 1990-12-03 + 1991-04-30 + 1991-07-02 + 1991-07-31 + 1991-04-02 + 1991-11-05 + 1991-11-05 + 1991-11-05 + 1992-09-01 + 1992-11-02 + 1992-11-02 + 1993-01-05 + 1992-09-30 + 1992-09-30 + 1993-01-05 + 1992-11-02 + 1993-04-30 + 1994-01-04 + 1994-01-04 + 1993-10-19 + 1993-10-26 + 1994-10-26 + 1994-10-26 + 1995-06-28 + 1995-11-01 + 1995-12-30 + 1995-12-30 + 1995-12-28 + 1997-06-18 + 2000-04-19 + 1976-08-01 + 1978-10-10 + 1978-09-19 + 1981-03-10 + 1981-11-03 + 1982-08-17 + 1984-04-03 + 1982-11-16 + 1982-08-17 + 1983-08-02 + 1983-10-16 + 1984-10-16 + 1984-10-16 + 1984-07-17 + 1984-04-03 + 1984-08-02 + 1984-10-30 + 1981-07-04 + 1985-05-14 + 1985-04-30 + 1985-04-30 + 1985-07-16 + 1985-07-02 + 1985-10-16 + 1985-07-02 + 1985-10-01 + 1986-03-04 + 1986-03-05 + 1986-03-05 + 1986-01-21 + 1986-03-11 + 1986-06-03 + 1986-07-15 + 1986-03-18 + 1986-07-08 + 1986-03-05 + 1986-03-11 + 1986-09-16 + 1986-08-05 + 1987-02-03 + 1986-09-16 + 1986-09-09 + 1987-02-03 + 1987-04-28 + 1987-07-14 + 1988-03-01 + 1988-05-03 + 1988-05-03 + 1988-11-01 + 1988-10-03 + 1989-04-03 + 1989-05-02 + 1989-02-02 + 1989-06-01 + 1989-06-01 + 1989-10-31 + 1990-01-31 + 1989-11-16 + 1989-12-30 + 1990-01-31 + 1990-04-02 + 1990-01-31 + 1990-01-31 + 1990-04-02 + 1990-08-01 + 1991-01-30 + 1990-08-01 + 1990-06-27 + 1990-08-01 + 1991-11-05 + 1990-08-01 + 1991-01-30 + 1990-08-01 + 1990-10-29 + 1990-10-01 + 1990-12-03 + 1990-10-29 + 1990-10-01 + 1990-12-31 + 1990-12-03 + 1990-11-14 + 1990-12-03 + 1991-01-30 + 1991-01-30 + 1991-01-30 + 1991-01-30 + 1991-11-05 + 1991-04-02 + 1991-04-02 + 1991-04-02 + 1991-07-02 + 1991-07-31 + 1991-12-31 + 1992-03-03 + 1992-03-03 + 1992-04-01 + 1992-09-01 + 1992-11-02 + 1993-01-05 + 1992-11-02 + 1992-11-25 + 1993-01-05 + 1992-11-02 + 1992-11-02 + 1993-01-05 + 1993-02-02 + 1993-06-30 + 1993-02-02 + 1992-11-02 + 1993-03-31 + 1993-04-30 + 1993-03-31 + 1993-04-30 + 1993-08-31 + 1993-06-01 + 1993-08-31 + 1993-10-26 + 1994-05-17 + 1994-03-30 + 1994-01-25 + 1995-01-03 + 1994-09-27 + 1994-08-31 + 1994-03-22 + 1994-10-26 + 1994-03-30 + 1995-12-30 + 1995-01-03 + 1998-07-15 + 1997-01-29 + 1995-11-01 + 1998-08-19 + 1996-08-28 + 1996-06-26 + 1996-04-02 + 2001-01-24 + 1996-10-29 + 1998-06-17 + 1996-07-23 + 1996-10-29 + 1997-01-29 + 1998-01-26 + 1998-01-26 + 1998-01-26 + 1998-07-15 + 1998-10-14 + 1998-10-14 + 2000-08-16 + 2000-01-26 + 2000-08-16 + 2000-06-14 + 2001-02-28 + 2002-02-20 + 2002-02-20 + 2003-03-19 + 2004-01-21 + 2005-09-14 + 2004-05-19 + 2003-05-21 + 2003-08-20 + 2004-01-21 + 2004-01-21 + 2003-10-29 + 2004-10-27 + 2005-05-18 + 2005-01-26 \ No newline at end of file diff --git a/test/plots/hexbin-edge.ts b/test/plots/hexbin-edge.ts new file mode 100644 index 0000000000..5938d4b84a --- /dev/null +++ b/test/plots/hexbin-edge.ts @@ -0,0 +1,35 @@ +import * as Plot from "@observablehq/plot"; + +// Regression test: when a data value lands exactly on a hexbin grid boundary +// (a half-integer in bin-index space), the rounding must go toward the interior +// of the plot rather than creating a floating bin outside the frame. With +// width=630, margin=0, inset=20, binWidth=20, the right edge is at pixel 610. +// 610/20 = 30.5 — a tie. Math.round(30.5) = 31, which would place the bin at +// 620, outside the frame. The center-directed rounding breaks this tie toward +// the interior (30), placing the bin at 600 instead. Similarly, on the left +// edge at pixel 20, odd-row bins land at 0.5 and round up (toward center) to +// 1, keeping them at 30 instead of floating outside at 10. +export async function hexbinEdge() { + const w = 630, + h = 400, + n = 190; + const nh = Math.round((n * h) / (w + h)); + const nw = n - nh; + const data = [ + ...Array.from({length: nw}, (_, i) => [i / (nw - 1), 0]), + ...Array.from({ length: nw }, (_, i) => [i / (nw - 1), 1]), + ...Array.from({length: nh}, (_, i) => [0, i / (nh - 1)]), + ...Array.from({length: nh}, (_, i) => [1, i / (nh - 1)]) + ]; + return Plot.plot({ + width: w, + height: h, + margin: 0, + axis: null, + inset: 20, + marks: [ + Plot.dot(data, Plot.hexbin({}, {binWidth: 20, stroke: "currentColor"})), + Plot.dot(data, {r: 1, fill: "red"}) + ] + }); +} diff --git a/test/plots/index.ts b/test/plots/index.ts index f54398dca7..8181dbe760 100644 --- a/test/plots/index.ts +++ b/test/plots/index.ts @@ -126,6 +126,7 @@ export * from "./hexbin-text.js"; export * from "./hexbin-z-null.js"; export * from "./hexbin-z.js"; export * from "./hexbin.js"; +export * from "./hexbin-edge.js"; export * from "./high-cardinality-ordinal.js"; export * from "./href-fill.js"; export * from "./ibm-trading.js";