diff --git a/docs/transforms/bin.md b/docs/transforms/bin.md index 11f29fa19d..c70855e370 100644 --- a/docs/transforms/bin.md +++ b/docs/transforms/bin.md @@ -274,6 +274,7 @@ The following named reducers are supported: * *y* - the middle of the bin’s *y* extent (when binning on *y*) * *y1* - the lower bound of the bin’s *y* extent (when binning on *y*) * *y2* - the upper bound of the bin’s *y* extent (when binning on *y*) +* *z* - the bin’s *z* value (*z*, *fill*, or *stroke*) In addition, a reducer may be specified as: diff --git a/docs/transforms/group.md b/docs/transforms/group.md index 9108d4f7d8..9c368a73a3 100644 --- a/docs/transforms/group.md +++ b/docs/transforms/group.md @@ -329,7 +329,7 @@ Although barX applies an implicit stackX transform, [textX](../marks/text.md) do ## Group options -Given input *data* = [*d₀*, *d₁*, *d₂*, …], by default the resulting grouped data is an array of arrays where each inner array is a subset of the input data such as [[*d₁*, *d₂*, …], [*d₀*, …], …]. Each inner array is in input order. The outer array is in natural ascending order according to the associated dimension (*x* then *y*). +Given input *data* = [*d₀*, *d₁*, *d₂*, …], by default the resulting grouped data is an array of arrays where each inner array is a subset of the input data such as [[*d₁*, *d₂*, …], [*d₀*, …], …]. Each inner array is in input order. The outer array is in input order according to the first element of each group. By specifying a different reducer for the **data** output, as described below, you can change how the grouped data is computed. The outputs may also include **filter** and **sort** options specified as reducers, and a **reverse** option to reverse the order of generated groups. By default, empty groups are omitted, and non-empty groups are generated in ascending (natural) order. @@ -370,6 +370,7 @@ The following named reducers are supported: * *identity* - the array of values * *x* - the group’s *x* value (when grouping on *x*) * *y* - the group’s *y* value (when grouping on *y*) +* *z* - the group’s *z* value (*z*, *fill*, or *stroke*) In addition, a reducer may be specified as: diff --git a/src/transforms/bin.d.ts b/src/transforms/bin.d.ts index b630278af9..28e2b6ad8a 100644 --- a/src/transforms/bin.d.ts +++ b/src/transforms/bin.d.ts @@ -117,6 +117,7 @@ export interface BinOptions { * - *y* - the middle of the bin’s **y** extent (when binning on **y**) * - *y1* - the lower bound of the bin’s **y** extent (when binning on **y**) * - *y2* - the upper bound of the bin’s **y** extent (when binning on **y**) + * - *z* - the bin’s **z** value (when grouping on **z**, **fill**, or **stroke**) * - a function that takes an array of values and returns the reduced value * - an object that implements the *reduceIndex* method * @@ -132,7 +133,8 @@ export type BinReducer = | "x2" | "y" | "y1" - | "y2"; + | "y2" + | "z"; /** * A shorthand functional bin reducer implementation: given an array of input diff --git a/src/transforms/bin.js b/src/transforms/bin.js index dc42c06f8f..16abb9d883 100644 --- a/src/transforms/bin.js +++ b/src/transforms/bin.js @@ -41,7 +41,8 @@ import { maybeSubgroup, reduceCount, reduceFirst, - reduceIdentity + reduceIdentity, + reduceZ } from "./group.js"; import {maybeInsetX, maybeInsetY} from "./inset.js"; @@ -180,6 +181,7 @@ function binn( for (const [f, I] of maybeGroup(facet, G)) { for (const [k, g] of maybeGroup(I, K)) { for (const [b, extent] of bin(g)) { + if (G) extent.z = f; if (filter && !filter.reduce(b, extent)) continue; groupFacet.push(i++); groupData.push(reduceData.reduceIndex(b, data, extent)); @@ -190,7 +192,7 @@ function binn( if (BX1) BX1.push(extent.x1), BX2.push(extent.x2); if (BY1) BY1.push(extent.y1), BY2.push(extent.y2); for (const o of outputs) o.reduce(b, extent); - if (sort) sort.reduce(b); + if (sort) sort.reduce(b, extent); } } } @@ -355,6 +357,8 @@ function maybeBinReduceFallback(reduce) { return reduceY1; case "y2": return reduceY2; + case "z": + return reduceZ; } throw new Error(`invalid bin reduce: ${reduce}`); } diff --git a/src/transforms/group.d.ts b/src/transforms/group.d.ts index 1982c76e0e..c2d438420a 100644 --- a/src/transforms/group.d.ts +++ b/src/transforms/group.d.ts @@ -44,13 +44,14 @@ export interface GroupOutputOptions { * - a generic reducer name, such as *count* or *first* * - *x* - the group’s **x** value (when grouping on **x**) * - *y* - the group’s **y** value (when grouping on **y**) + * - *z* - the group’s **z** value (when grouping on **z**, **fill**, or **stroke**) * - a function that takes an array of values and returns the reduced value * - an object that implements the *reduceIndex* method * * When a reducer function or implementation is used with the group transform, * it is passed the group extent {x, y} as an additional argument. */ -export type GroupReducer = Reducer | GroupReducerFunction | GroupReducerImplementation | "x" | "y"; +export type GroupReducer = Reducer | GroupReducerFunction | GroupReducerImplementation | "x" | "y" | "z"; /** * A shorthand functional group reducer implementation: given an array of input diff --git a/src/transforms/group.js b/src/transforms/group.js index 4330c886a1..07ae348359 100644 --- a/src/transforms/group.js +++ b/src/transforms/group.js @@ -17,7 +17,6 @@ import { import {ascendingDefined} from "../defined.js"; import { column, - first, identity, isObject, isTemporal, @@ -137,6 +136,7 @@ function groupn( const extent = {data}; if (X) extent.x = x; if (Y) extent.y = y; + if (G) extent.z = f; if (filter && !filter.reduce(g, extent)) continue; groupFacet.push(i++); groupData.push(reduceData.reduceIndex(g, data, extent)); @@ -230,12 +230,7 @@ export function maybeEvaluator(name, reduce, inputs, asReduce = maybeReduce) { } export function maybeGroup(I, X) { - return X - ? sort( - grouper(I, (i) => X[i]), - first - ) - : [[, I]]; + return X ? grouper(I, (i) => X[i]) : [[, I]]; } export function maybeReduce(reduce, value, fallback = invalidReduce) { @@ -309,6 +304,8 @@ function maybeGroupReduceFallback(reduce) { return reduceX; case "y": return reduceY; + case "z": + return reduceZ; } throw new Error(`invalid group reduce: ${reduce}`); } @@ -437,6 +434,12 @@ const reduceY = { } }; +export const reduceZ = { + reduceIndex(I, X, {z}) { + return z; + } +}; + export function find(test) { if (typeof test !== "function") throw new Error(`invalid test function: ${test}`); return { diff --git a/test/output/athletesBirthdays.svg b/test/output/athletesBirthdays.svg index 5f2998066d..86ead317a8 100644 --- a/test/output/athletesBirthdays.svg +++ b/test/output/athletesBirthdays.svg @@ -61,32 +61,32 @@ Frequency → - - - - + + + + + + + + - - - - - 1,098 - 956 - 1,022 - 962 + 849 + 961 1,028 + 1,098 + 827 961 + 897 988 + 962 + 956 + 1,022 989 - 961 - 849 - 827 - 897 diff --git a/test/output/athletesHeightWeightSex.svg b/test/output/athletesHeightWeightSex.svg index fa1dc66a7b..a557f9ed8a 100644 --- a/test/output/athletesHeightWeightSex.svg +++ b/test/output/athletesHeightWeightSex.svg @@ -86,515 +86,6 @@ weight → - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1285,5 +776,514 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/output/athletesSexWeight.svg b/test/output/athletesSexWeight.svg index cedd02735e..4a00608978 100644 --- a/test/output/athletesSexWeight.svg +++ b/test/output/athletesSexWeight.svg @@ -77,30 +77,6 @@ weight → - - - - - - - - - - - - - - - - - - - - - - - - @@ -128,6 +104,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/output/athletesSortWeightLimit.svg b/test/output/athletesSortWeightLimit.svg index ca97eb8b45..3f437f0ada 100644 --- a/test/output/athletesSortWeightLimit.svg +++ b/test/output/athletesSortWeightLimit.svg @@ -159,15 +159,15 @@ - - + + + + - - - - - + + + \ No newline at end of file diff --git a/test/output/athletesSportSex.svg b/test/output/athletesSportSex.svg index 92f5d9fd29..6d79c08398 100644 --- a/test/output/athletesSportSex.svg +++ b/test/output/athletesSportSex.svg @@ -116,33 +116,33 @@ Women (%) → - - - - - - - - + + + + + + + - - + + + + + + - - - - - - - - - + + + + - + + + \ No newline at end of file diff --git a/test/output/autoBarMode.svg b/test/output/autoBarMode.svg index 7a0bfcd2f3..444cc1e82b 100644 --- a/test/output/autoBarMode.svg +++ b/test/output/autoBarMode.svg @@ -40,9 +40,9 @@ island + - \ No newline at end of file diff --git a/test/output/autoBarStackColor.svg b/test/output/autoBarStackColor.svg index 4b1ebc3214..ad6fe57386 100644 --- a/test/output/autoBarStackColor.svg +++ b/test/output/autoBarStackColor.svg @@ -50,12 +50,12 @@ Frequency → - - - - - - + + + + + + diff --git a/test/output/autoBarTimeSeriesReduce.svg b/test/output/autoBarTimeSeriesReduce.svg index 0b675afc61..b68317fb31 100644 --- a/test/output/autoBarTimeSeriesReduce.svg +++ b/test/output/autoBarTimeSeriesReduce.svg @@ -57,12 +57,12 @@ 30 - - - - + + + + diff --git a/test/output/autoDotOrdinal.svg b/test/output/autoDotOrdinal.svg index 7150a02fa5..eedecc88a8 100644 --- a/test/output/autoDotOrdinal.svg +++ b/test/output/autoDotOrdinal.svg @@ -465,12 +465,12 @@ - + - + @@ -482,8 +482,8 @@ - + @@ -502,12 +502,12 @@ - - + - + + @@ -516,8 +516,8 @@ - + @@ -526,334 +526,334 @@ - - - + + + + - - + - - - + + + - - + + + - - + - - + - + + + - - - + + + - - - + - - + + + - - - - + + + + + - - - + + - + - + - - + + - + - + - - + + + + - - - - - - - - + - - - + + + + - - - - + + + + - + - + + + + + + + + - - - - - + + + + + + + - - + + + + + - - + - - - - - - - - - + + + + - - - - - - + + + + + + + + + + + + + + + - - - - - + + + + + - + - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - + + + + - - - - - + + + - + + + + + + + + + - + + + + + + + + + + + + + - - - - - - - + + + + + - - - - - - + + + + + + + + + + + + - - - - - - - - + + + - - + + + + + + - + + + + + + + + - - - + + - - - - - - - - - - - + + + + + - - - - - - - - - - - + + - - - - - - + + + + + + + + - - - - - - - + - - + - - - - - - - - + + + + + + + + + + - + + + + + - + + + - - + - - - + + \ No newline at end of file diff --git a/test/output/autoHeatmapOrdinal.svg b/test/output/autoHeatmapOrdinal.svg index 22a1b50a38..2948cbf9d2 100644 --- a/test/output/autoHeatmapOrdinal.svg +++ b/test/output/autoHeatmapOrdinal.svg @@ -40,9 +40,9 @@ island + - diff --git a/test/output/autoHistogramGroup.svg b/test/output/autoHistogramGroup.svg index 20b7d7c5be..2cc6884fe6 100644 --- a/test/output/autoHistogramGroup.svg +++ b/test/output/autoHistogramGroup.svg @@ -52,9 +52,9 @@ island + - diff --git a/test/output/autoLineMeanColor.svg b/test/output/autoLineMeanColor.svg index 6c86e4aa9e..3bb3e748f1 100644 --- a/test/output/autoLineMeanColor.svg +++ b/test/output/autoLineMeanColor.svg @@ -62,8 +62,8 @@ date_of_birth → - + \ No newline at end of file diff --git a/test/output/autoRectStackColor.svg b/test/output/autoRectStackColor.svg index f2796ddb3b..8e25172779 100644 --- a/test/output/autoRectStackColor.svg +++ b/test/output/autoRectStackColor.svg @@ -58,39 +58,39 @@ culmen_length_mm → - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - diff --git a/test/output/carsMpg.svg b/test/output/carsMpg.svg index 3905f61dd8..9680efa026 100644 --- a/test/output/carsMpg.svg +++ b/test/output/carsMpg.svg @@ -86,187 +86,187 @@ year - + + + - - - - - - + + + + + + + - + - - - - - - - - - - - - + + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + \ No newline at end of file diff --git a/test/output/channelDomainAscending.svg b/test/output/channelDomainAscending.svg index 63d2579509..3bd169ae03 100644 --- a/test/output/channelDomainAscending.svg +++ b/test/output/channelDomainAscending.svg @@ -81,24 +81,24 @@ - - - + - + + + + + - - + + - + + - - - - + \ No newline at end of file diff --git a/test/output/channelDomainAscendingReverse.svg b/test/output/channelDomainAscendingReverse.svg index 58d4c588cd..89d8deb18d 100644 --- a/test/output/channelDomainAscendingReverse.svg +++ b/test/output/channelDomainAscendingReverse.svg @@ -80,25 +80,25 @@ Frequency → - - - - - - - - - - - - + - - + + + + + + + + + + + + + + - \ No newline at end of file diff --git a/test/output/channelDomainComparator.svg b/test/output/channelDomainComparator.svg index 13755bdb50..89d8deb18d 100644 --- a/test/output/channelDomainComparator.svg +++ b/test/output/channelDomainComparator.svg @@ -55,7 +55,7 @@ NZL UKR SWE - COL + HUN nationality @@ -80,25 +80,25 @@ Frequency → - - - - - - - - - - - - + - - + + + + + + + + + + + + + + - \ No newline at end of file diff --git a/test/output/channelDomainComparatorReverse.svg b/test/output/channelDomainComparatorReverse.svg index 58d4c588cd..c3dd86fbc7 100644 --- a/test/output/channelDomainComparatorReverse.svg +++ b/test/output/channelDomainComparatorReverse.svg @@ -55,7 +55,7 @@ NZL UKR SWE - HUN + COL nationality @@ -80,25 +80,25 @@ Frequency → - + + + + + + + + + + + - - - + - + + - - - - - - - - - \ No newline at end of file diff --git a/test/output/channelDomainDefault.svg b/test/output/channelDomainDefault.svg index 63d2579509..3bd169ae03 100644 --- a/test/output/channelDomainDefault.svg +++ b/test/output/channelDomainDefault.svg @@ -81,24 +81,24 @@ - - - + - + + + + + - - + + - + + - - - - + \ No newline at end of file diff --git a/test/output/channelDomainDefaultReverse.svg b/test/output/channelDomainDefaultReverse.svg index 58d4c588cd..89d8deb18d 100644 --- a/test/output/channelDomainDefaultReverse.svg +++ b/test/output/channelDomainDefaultReverse.svg @@ -80,25 +80,25 @@ Frequency → - - - - - - - - - - - - + - - + + + + + + + + + + + + + + - \ No newline at end of file diff --git a/test/output/channelDomainDescending.svg b/test/output/channelDomainDescending.svg index 13755bdb50..c3dd86fbc7 100644 --- a/test/output/channelDomainDescending.svg +++ b/test/output/channelDomainDescending.svg @@ -80,25 +80,25 @@ Frequency → - - - - - - - - - - - - + - - + + + + + + + + + + + + + + - \ No newline at end of file diff --git a/test/output/channelDomainDescendingReverse.svg b/test/output/channelDomainDescendingReverse.svg index bfd1a094f2..826c68a853 100644 --- a/test/output/channelDomainDescendingReverse.svg +++ b/test/output/channelDomainDescendingReverse.svg @@ -80,25 +80,25 @@ Frequency → - - - + - + + + + + - - + + - + + - - - - - + + \ No newline at end of file diff --git a/test/output/channelDomainMinus.svg b/test/output/channelDomainMinus.svg index 13755bdb50..c3dd86fbc7 100644 --- a/test/output/channelDomainMinus.svg +++ b/test/output/channelDomainMinus.svg @@ -80,25 +80,25 @@ Frequency → - - - - - - - - - - - - + - - + + + + + + + + + + + + + + - \ No newline at end of file diff --git a/test/output/channelDomainMinusReverse.svg b/test/output/channelDomainMinusReverse.svg index bfd1a094f2..826c68a853 100644 --- a/test/output/channelDomainMinusReverse.svg +++ b/test/output/channelDomainMinusReverse.svg @@ -80,25 +80,25 @@ Frequency → - - - + - + + + + + - - + + - + + - - - - - + + \ No newline at end of file diff --git a/test/output/diamondsBoxplot.svg b/test/output/diamondsBoxplot.svg index e1b1150865..5e832bc392 100644 --- a/test/output/diamondsBoxplot.svg +++ b/test/output/diamondsBoxplot.svg @@ -62,34 +62,34 @@ price → - - - + - + + + - - - + - + + + - - - + - + + + diff --git a/test/output/fruitSales.svg b/test/output/fruitSales.svg index 61edc265cd..df6ba7250e 100644 --- a/test/output/fruitSales.svg +++ b/test/output/fruitSales.svg @@ -56,9 +56,9 @@ - - + + diff --git a/test/output/gridReduceIdentity.svg b/test/output/gridReduceIdentity.svg index 2403cd624a..03cd47c78c 100644 --- a/test/output/gridReduceIdentity.svg +++ b/test/output/gridReduceIdentity.svg @@ -68,12 +68,12 @@ AK,ME - VT,NH,MA + CA,NV,UT,CO,KS,MO,KY,WV,DC,MD,DE + HI,FL WA,MT,ND,SD,MN,WI,MI,NY,CT,RI OR,ID,WY,NE,IA,IL,IN,OH,PA,NJ - CA,NV,UT,CO,KS,MO,KY,WV,DC,MD,DE AZ,NM,OK,AR,TN,VA,NC TX,LA,MS,AL,GA,SC - HI,FL + VT,NH,MA \ No newline at end of file diff --git a/test/output/hexbinSymbol.html b/test/output/hexbinSymbol.html index 025b6d1a24..c3eb03e81a 100644 --- a/test/output/hexbinSymbol.html +++ b/test/output/hexbinSymbol.html @@ -132,21 +132,12 @@ + + - - - - - - - - - - - @@ -158,28 +149,15 @@ - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + @@ -204,6 +182,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -272,73 +339,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/test/output/internFacetNaN.svg b/test/output/internFacetNaN.svg index 2cca9cb3cd..0dfb4d2791 100644 --- a/test/output/internFacetNaN.svg +++ b/test/output/internFacetNaN.svg @@ -199,20 +199,20 @@ - + - + - + - + @@ -221,8 +221,8 @@ - + @@ -245,20 +245,20 @@ - + - + - + - + @@ -267,8 +267,8 @@ - + @@ -291,20 +291,20 @@ - + - + - + - + @@ -313,8 +313,8 @@ - + diff --git a/test/output/intervalAwareBin.svg b/test/output/intervalAwareBin.svg index 57e5e58180..155621f022 100644 --- a/test/output/intervalAwareBin.svg +++ b/test/output/intervalAwareBin.svg @@ -66,65 +66,6 @@ weight → - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -151,6 +92,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -258,30 +225,28 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -324,6 +289,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -334,6 +323,19 @@ + + + + + + + + + + + + + @@ -346,7 +348,5 @@ - - \ No newline at end of file diff --git a/test/output/intervalAwareGroup.svg b/test/output/intervalAwareGroup.svg index 8a11a77442..87430c8f87 100644 --- a/test/output/intervalAwareGroup.svg +++ b/test/output/intervalAwareGroup.svg @@ -60,16 +60,16 @@ date_of_birth → - - - - - - + + + + + + \ No newline at end of file diff --git a/test/output/likertSurvey.html b/test/output/likertSurvey.html index 45da862a02..e014dc66ad 100644 --- a/test/output/likertSurvey.html +++ b/test/output/likertSurvey.html @@ -87,26 +87,26 @@ - - - - - - - - - - + + + + + + + + + + diff --git a/test/output/mobyDickFaceted.svg b/test/output/mobyDickFaceted.svg index 3286115326..c9e112a03e 100644 --- a/test/output/mobyDickFaceted.svg +++ b/test/output/mobyDickFaceted.svg @@ -228,60 +228,60 @@ - - - - - - - - - - - - - + + + + + - + + + + + + + + + - - - + + + + + + + - - - - - - - + + + + - - - + + - - + + + - diff --git a/test/output/mobyDickLetterFrequency.svg b/test/output/mobyDickLetterFrequency.svg index e51880fe2d..e586d5acba 100644 --- a/test/output/mobyDickLetterFrequency.svg +++ b/test/output/mobyDickLetterFrequency.svg @@ -118,32 +118,32 @@ Z - - - - - - - - - - + - + + + + - - + - - - + + + - - + + + + + + + + + diff --git a/test/output/mobyDickLetterFrequencyFillX.svg b/test/output/mobyDickLetterFrequencyFillX.svg index 998a42a7c9..1a0cb918e0 100644 --- a/test/output/mobyDickLetterFrequencyFillX.svg +++ b/test/output/mobyDickLetterFrequencyFillX.svg @@ -118,32 +118,32 @@ Z - - - - - - - - - - + - + + + + - - + - - - + + + - - + + + + + + + + + diff --git a/test/output/mobyDickLetterPairs.svg b/test/output/mobyDickLetterPairs.svg index 27b58c0540..5f86e2645e 100644 --- a/test/output/mobyDickLetterPairs.svg +++ b/test/output/mobyDickLetterPairs.svg @@ -72,411 +72,411 @@ Z - - - - - - - - - - - + + - + + + + - - + - - - + + + - - + + + + + + + + + + * + * * - * - * - * + * + * + * * - * - * + * * - * + * + * + * * - * - * + * + * * - * - * + * * - * - * - * * - * + * + * * - * - 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 - B + A + A B - B - B B - B - B - B + B + B B + B + B B - C - C - C + B + B C C - C + C + C + C C C - C + C + C C C - C + C + D + D D + D + D + D + D D D - D D - D - D - D - D D - D - E + E E - E - E - E + E + E + E + E + E + E + E E - E - E E + E + E + E + E + E E E - E - E - E + E + E E - E - E - E - E - E - E + E E E - E - E + E + F + F F - F - F + F F - F F - F - F - F - F F - F - F + F F - G + F + F + F + F + F G - G + G + G G - G - G + G G - G + G + G G + G G - G + H H - H - H - H + H H - H + H + H + H H + H H - H - H - H + H I - I - I + I I - I - I + I + I + I + I + I + I I + I + I I - I + I + I + I I - I - I + I I I - I - I - I - I - I - I - I - I + I I + I J - J J + J K - K K - K - K - K - K + K K + K K + K K - L + K + K L - L - L - L + L L - L - L - L + L + L + L L - L - L - L - L L + L + L + L + L L - L - L + L + L + L + L + L L - L + L M - M - M - M M + M M + M + M M M - M - M - M + M M + M + M M - M + M N + N + N N N - N - N + N N - N - N + N N + N + N N - N - N - O - O - O - O - O - O + O O O - O - O O - O + O O - O - O - O - O + O O - O O + O + O + O + O + O + O + O + O + O O + O + O P - P - P - P - P + P P - P - P + P + P P + P + P + P P - P - P P - P - Q + P + P + P Q + Q Q - R R - R - R - R R - R + R + R + R + R + R + R R + R + R + R R - R - R - R R - R - R + R R + S S + S + S + S + S + S + S S S - S + S + S + S S - S + S S - S - S - S - S S - S - S - S + S S - S S - S - S - S - S - T - T - T - T - T - T - T + S + S T - T - T + T T - T T + T + T T - T + T T + T + T + T + T T + T + T T - U - U - U + T + U U - U - U + U U - U - U U + U + U + U + U + U + U + U U + U U - U - U - U U - U - U + U + U U - V - V V + V V - V - V V + V + V V + V + W W - W + W W + W W W - W - W - W + W W - X X X + X Y + Y + Y + Y + Y Y + Y + Y Y - Y Y - Y - Y - Y - Y - Y Y Y Y - Y - Y - Y - Y Y - Z - Z + Y + Y + Y + Y Z Z + Z + Z \ No newline at end of file diff --git a/test/output/mobyDickLetterPosition.svg b/test/output/mobyDickLetterPosition.svg index 07b4a424e1..0388e29bec 100644 --- a/test/output/mobyDickLetterPosition.svg +++ b/test/output/mobyDickLetterPosition.svg @@ -105,252 +105,252 @@ Position within word - + + + + + + + + + + + - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + - + + + + - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - + + + + + + - - - + + - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + \ No newline at end of file diff --git a/test/output/mobyDickLetterRelativeFrequency.svg b/test/output/mobyDickLetterRelativeFrequency.svg index 10761a9d02..133ed30dbc 100644 --- a/test/output/mobyDickLetterRelativeFrequency.svg +++ b/test/output/mobyDickLetterRelativeFrequency.svg @@ -118,32 +118,32 @@ Z - - - - - - - - - - + - + + + + - - + - - - + + + - - + + + + + + + + + diff --git a/test/output/moviesProfitByGenre.svg b/test/output/moviesProfitByGenre.svg index 40ce0c496c..e21cbd8e3c 100644 --- a/test/output/moviesProfitByGenre.svg +++ b/test/output/moviesProfitByGenre.svg @@ -74,19 +74,19 @@ - - - - - - + - + - - + + + + + + + @@ -3292,18 +3292,18 @@ - - - - - - + - + - - + + + + + + + \ No newline at end of file diff --git a/test/output/penguinAnnotated.svg b/test/output/penguinAnnotated.svg index b71bb8c8ad..a6c71c4b37 100644 --- a/test/output/penguinAnnotated.svg +++ b/test/output/penguinAnnotated.svg @@ -49,17 +49,17 @@ Frequency → - - FEMALE (73) - FEMALE (34) - FEMALE (58) - MALE (73) - MALE (34) - MALE (61) + MALE (73) + MALE (34) + MALE (61) + FEMALE (73) + FEMALE (34) + FEMALE (58) null (6) null (5) + Count of penguinsgrouped by species and colored by sex diff --git a/test/output/penguinFacetAnnotated.svg b/test/output/penguinFacetAnnotated.svg index df2dbaf0ec..e5870074fc 100644 --- a/test/output/penguinFacetAnnotated.svg +++ b/test/output/penguinFacetAnnotated.svg @@ -89,11 +89,6 @@ Frequency → - - - - - @@ -110,11 +105,16 @@ - - + + + + + + + Torgersen Island only has Adelie penguins! diff --git a/test/output/penguinFacetAnnotatedX.svg b/test/output/penguinFacetAnnotatedX.svg index 329793cdf1..ba0f635467 100644 --- a/test/output/penguinFacetAnnotatedX.svg +++ b/test/output/penguinFacetAnnotatedX.svg @@ -81,11 +81,6 @@ Frequency → - - - - - @@ -102,11 +97,16 @@ - - + + + + + + + Torgersen Islandonly has Adeliepenguins! diff --git a/test/output/penguinIslandUnknown.svg b/test/output/penguinIslandUnknown.svg index 0d5fd0b532..89b40ff5f2 100644 --- a/test/output/penguinIslandUnknown.svg +++ b/test/output/penguinIslandUnknown.svg @@ -57,8 +57,8 @@ - + diff --git a/test/output/penguinSex.svg b/test/output/penguinSex.svg index b163855c28..1a18b2c87b 100644 --- a/test/output/penguinSex.svg +++ b/test/output/penguinSex.svg @@ -51,8 +51,8 @@ sex - + diff --git a/test/output/penguinSpeciesIslandSex.svg b/test/output/penguinSpeciesIslandSex.svg index ff272ab9e9..7cd5d4921c 100644 --- a/test/output/penguinSpeciesIslandSex.svg +++ b/test/output/penguinSpeciesIslandSex.svg @@ -160,14 +160,14 @@ - - - - - - - - + + + + + + + + diff --git a/test/output/shorthandGroupBarY.svg b/test/output/shorthandGroupBarY.svg index b06c1a9e50..70828e3b69 100644 --- a/test/output/shorthandGroupBarY.svg +++ b/test/output/shorthandGroupBarY.svg @@ -50,8 +50,8 @@ - + \ No newline at end of file diff --git a/test/output/tipBar.svg b/test/output/tipBar.svg index fa3f011951..c483d5b970 100644 --- a/test/output/tipBar.svg +++ b/test/output/tipBar.svg @@ -94,34 +94,34 @@ Frequency → - - - - - - - - + + + + + + + - - + + + + + + - - - - - - - - - + + + + - + + + \ No newline at end of file diff --git a/test/output/tipCell.svg b/test/output/tipCell.svg index 1e2f7c6e45..09526b1c48 100644 --- a/test/output/tipCell.svg +++ b/test/output/tipCell.svg @@ -88,62 +88,62 @@ sex - - - - - - - - - - - - - - - - - + - + + + + + + + + + + + + + + - - - - - + + + + + + + + + + + - + + + - - - + - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - - + + \ No newline at end of file diff --git a/test/output/tipCellFacet.svg b/test/output/tipCellFacet.svg index 24ee381742..c24f88eae2 100644 --- a/test/output/tipCellFacet.svg +++ b/test/output/tipCellFacet.svg @@ -93,64 +93,64 @@ + + + + + + + + + + + + + - - - + + + + - - - - - - - - - - - - - - - + - + - - - - - - + + + + + + + + + + - - - + - - - - - - - - - + + + + - + + + + diff --git a/test/output/tipGroupPrimitives.svg b/test/output/tipGroupPrimitives.svg index 3441cf3017..70fae9e7c8 100644 --- a/test/output/tipGroupPrimitives.svg +++ b/test/output/tipGroupPrimitives.svg @@ -49,16 +49,16 @@ f + + - - - - - + + + \ No newline at end of file diff --git a/test/output/usPopulationStateAgeDots.svg b/test/output/usPopulationStateAgeDots.svg index f8b8164ac4..c609d74952 100644 --- a/test/output/usPopulationStateAgeDots.svg +++ b/test/output/usPopulationStateAgeDots.svg @@ -59,58 +59,58 @@ - - + + - + - + - - + + - + - - + - + + - - + - + + diff --git a/test/output/wordCloud.svg b/test/output/wordCloud.svg index d23901c58c..05a3fa5322 100644 --- a/test/output/wordCloud.svg +++ b/test/output/wordCloud.svg @@ -14,253 +14,253 @@ } - a (69) - about (7) - account (2) - ago (2) - air (2) - all (23) - almost (3) - aloft (2) - always (2) - am (4) - among (2) - an (4) - and (73) - any (2) - are (5) - as (26) - at (5) - be (9) - because (4) - been (2) - before (3) - begin (2) - being (4) - besides (2) - better (2) - between (2) - broiled (3) - but (15) - by (8) - can (6) - cannot (2) - captain (2) - care (2) - chief (2) - city (2) - come (3) - commodore (2) - content (2) - cook (3) - could (2) - country (2) - crowds (2) - deck (2) - deep (2) - did (5) - distant (2) - do (8) - does (2) - down (6) - each (2) - else (2) - ever (5) - every (4) - exactly (2) - fates (2) - find (2) - first (4) - fixed (2) - for (16) - forecastle (2) - from (11) - get (6) - glory (2) - go (12) - going (4) - grand (3) - great (3) - grow (2) - hand (3) - have (8) - having (2) - he (10) - head (4) - healthy (2) - here (5) - high (4) - hill (2) - him (3) - himself (2) - his (10) - how (3) - however (2) - hunks (2) - i (43) - if (9) - image (3) - in (48) - into (9) - is (34) - ishmael (2) - it (33) - its (2) - just (2) - land (6) - lead (2) - leaders (2) - leaves (2) - let (2) - like (6) - little (4) - long (2) - look (2) - magic (2) - make (2) - man (3) - mast (2) - may (3) - me (25) - meadow (2) - mean (2) - meaning (2) - men (4) - metaphysical (2) - miles (3) - money (4) - more (6) - most (5) - motives (2) - much (4) - must (4) - my (14) - myself (3) - never (5) - no (6) - not (11) - nothing (3) - now (5) - ocean (2) - of (81) - off (3) - officer (2) - old (6) - on (12) - once (2) - one (10) - or (10) - order (2) - other (5) - others (2) - ourselves (2) - out (3) - over (2) - own (2) - paid (2) - part (7) - particular (2) - parts (3) - passenger (4) - passengers (3) - pay (2) - paying (3) - perhaps (2) - phantom (2) - plunged (2) - point (2) - previous (2) - purse (3) - requires (2) - respectfully (2) - reveries (2) - right (3) - robust (2) - round (2) - sail (2) - sailor (5) - same (5) - say (3) - schoolmaster (2) - scores (2) - sea (13) - seas (2) - see (6) - set (3) - shepherds (2) - ship (3) - ships (3) - should (3) - sight (2) - sleep (2) - so (4) - some (11) - something (3) - sort (3) - soul (3) - spar (2) - stand (5) - still (3) - stream (2) - streets (2) - strong (2) - such (5) - take (6) - tell (4) - than (4) - that (31) - the (124) - their (4) - them (5) - themselves (2) - then (5) - there (16) - these (4) - they (12) - thing (2) - things (4) - think (2) - thinks (2) - this (17) - those (4) - though (7) - thousand (2) - thousands (2) - thump (2) - time (6) - to (53) - two (4) - under (2) - unless (2) - up (4) - upon (9) - voyage (6) - warehouses (2) - was (8) - water (8) - way (6) - we (3) - well (2) - were (7) - whale (3) - whaling (5) - what (9) - when (5) - whenever (5) - where (2) - which (4) - who (5) - why (7) - wild (2) - will (6) - winds (3) - with (13) - without (3) - world (4) - would (4) - yet (4) - yonder (2) - you (23) - your (6) + me (25) + ishmael (2) + some (11) + ago (2) + never (5) + how (3) + long (2) + having (2) + little (4) + or (10) + no (6) + money (4) + in (48) + my (14) + purse (3) + and (73) + nothing (3) + particular (2) + to (53) + on (12) + i (43) + would (4) + sail (2) + about (7) + a (69) + see (6) + the (124) + part (7) + of (81) + world (4) + it (33) + is (34) + way (6) + have (8) + off (3) + whenever (5) + find (2) + myself (3) + soul (3) + before (3) + warehouses (2) + up (4) + every (4) + get (6) + such (5) + an (4) + hand (3) + that (31) + requires (2) + strong (2) + from (11) + into (9) + then (5) + account (2) + high (4) + time (6) + sea (13) + as (26) + can (6) + this (17) + for (16) + with (13) + himself (2) + upon (9) + his (10) + take (6) + ship (3) + there (16) + if (9) + they (12) + but (15) + almost (3) + all (23) + men (4) + their (4) + other (5) + same (5) + ocean (2) + now (5) + your (6) + city (2) + round (2) + by (8) + right (3) + streets (2) + you (23) + its (2) + where (2) + which (4) + previous (2) + were (7) + out (3) + sight (2) + land (6) + look (2) + at (5) + crowds (2) + water (8) + go (12) + what (9) + do (8) + like (6) + stand (5) + thousands (2) + fixed (2) + reveries (2) + over (2) + ships (3) + aloft (2) + still (3) + better (2) + these (4) + are (5) + here (5) + come (3) + more (6) + will (6) + content (2) + them (5) + under (2) + yonder (2) + not (11) + must (4) + just (2) + without (3) + miles (3) + yet (4) + tell (4) + does (2) + those (4) + once (2) + say (3) + country (2) + any (2) + one (10) + down (6) + leaves (2) + stream (2) + magic (2) + let (2) + most (5) + be (9) + plunged (2) + man (3) + set (3) + going (4) + he (10) + lead (2) + should (3) + ever (5) + great (3) + metaphysical (2) + chief (2) + each (2) + meadow (2) + sleep (2) + deep (2) + distant (2) + winds (3) + hill (2) + though (7) + shepherds (2) + head (4) + unless (2) + him (3) + when (5) + scores (2) + among (2) + thousand (2) + why (7) + did (5) + two (4) + robust (2) + healthy (2) + first (4) + voyage (6) + passenger (4) + old (6) + own (2) + meaning (2) + who (5) + because (4) + could (2) + image (3) + was (8) + we (3) + ourselves (2) + phantom (2) + am (4) + begin (2) + grow (2) + mean (2) + something (3) + besides (2) + passengers (3) + themselves (2) + much (4) + thing (2) + commodore (2) + captain (2) + cook (3) + glory (2) + care (2) + being (4) + sort (3) + officer (2) + broiled (3) + respectfully (2) + than (4) + sailor (5) + mast (2) + forecastle (2) + order (2) + make (2) + spar (2) + may (3) + been (2) + schoolmaster (2) + hunks (2) + think (2) + thinks (2) + well (2) + however (2) + thump (2) + else (2) + point (2) + so (4) + others (2) + always (2) + paying (3) + pay (2) + between (2) + paid (2) + perhaps (2) + air (2) + deck (2) + leaders (2) + things (4) + whaling (5) + fates (2) + grand (3) + cannot (2) + exactly (2) + parts (3) + motives (2) + whale (3) + wild (2) + seas (2) \ No newline at end of file diff --git a/test/output/wordLengthMobyDick.svg b/test/output/wordLengthMobyDick.svg index 9bfde568f9..87d1ef00e9 100644 --- a/test/output/wordLengthMobyDick.svg +++ b/test/output/wordLengthMobyDick.svg @@ -91,19 +91,19 @@ Word length → - a - of - the that - there - though + of because - whenever + there + the passenger + though passengers + whenever + a circulation - metaphysical involuntarily + metaphysical Circumambulate \ No newline at end of file diff --git a/test/plots/cars-mpg.ts b/test/plots/cars-mpg.ts index 527585fa11..f5c583e8f1 100644 --- a/test/plots/cars-mpg.ts +++ b/test/plots/cars-mpg.ts @@ -18,7 +18,7 @@ export async function carsMpg() { Plot.line( data, Plot.groupX( - {y: "mean"}, + {y: "mean", sort: "x"}, { x: "year", y: "economy (mpg)", diff --git a/test/plots/moby-dick-letter-pairs.ts b/test/plots/moby-dick-letter-pairs.ts index 00a9d5a0d9..79442baf26 100644 --- a/test/plots/moby-dick-letter-pairs.ts +++ b/test/plots/moby-dick-letter-pairs.ts @@ -17,7 +17,8 @@ export async function mobyDickLetterPairs() { { text: "first", y: "first", - x: "distinct" + x: "distinct", + sort: "x" }, { y: "letter", diff --git a/test/plots/penguin-annotated.ts b/test/plots/penguin-annotated.ts index 2b06a872e6..7a70b7e801 100644 --- a/test/plots/penguin-annotated.ts +++ b/test/plots/penguin-annotated.ts @@ -7,8 +7,8 @@ export async function penguinAnnotated() { marginLeft: 75, x: {insetRight: 10}, marks: [ - Plot.frame(), Plot.barX(penguins, Plot.groupY({x: "count"}, {y: "species", fill: "sex", title: "sex", sort: {y: "-x"}})), + Plot.frame(), Plot.text(["Count of penguins\ngrouped by species\n and colored by sex"], { frameAnchor: "bottom-right", dx: -3, diff --git a/test/plots/penguin-facet-annotated-x.ts b/test/plots/penguin-facet-annotated-x.ts index 9a5de69c6a..19fabb1e34 100644 --- a/test/plots/penguin-facet-annotated-x.ts +++ b/test/plots/penguin-facet-annotated-x.ts @@ -7,8 +7,8 @@ export async function penguinFacetAnnotatedX() { marginLeft: 75, x: {insetRight: 10}, marks: [ - Plot.frame(), Plot.barX(penguins, Plot.groupY({x: "count"}, {fx: "island", y: "species", fill: "sex"})), + Plot.frame(), Plot.text(["Torgersen Island only has Adelie penguins!"], { fx: ["Torgersen"], frameAnchor: "top-right", diff --git a/test/plots/penguin-facet-annotated.ts b/test/plots/penguin-facet-annotated.ts index 2524d26701..c823d75218 100644 --- a/test/plots/penguin-facet-annotated.ts +++ b/test/plots/penguin-facet-annotated.ts @@ -7,8 +7,8 @@ export async function penguinFacetAnnotated() { marginLeft: 75, facet: {marginRight: 70}, marks: [ - Plot.frame(), Plot.barX(penguins, Plot.groupY({x: "count"}, {fy: "island", y: "species", fill: "sex"})), + Plot.frame(), Plot.text(["Torgersen Island only has Adelie penguins!"], { fy: ["Torgersen"], frameAnchor: "top-right", diff --git a/test/plots/penguin-island-unknown.ts b/test/plots/penguin-island-unknown.ts index 31ceb0afb5..e074ca8468 100644 --- a/test/plots/penguin-island-unknown.ts +++ b/test/plots/penguin-island-unknown.ts @@ -8,6 +8,6 @@ export async function penguinIslandUnknown() { domain: ["Dream"], unknown: "#ccc" }, - marks: [Plot.barY(penguins, Plot.groupX({y: "count"}, {x: "sex", fill: "island"})), Plot.ruleY([0])] + marks: [Plot.barY(penguins, Plot.groupX({y: "count", sort: "z"}, {x: "sex", fill: "island"})), Plot.ruleY([0])] }); } diff --git a/test/plots/penguin-species-island-relative.ts b/test/plots/penguin-species-island-relative.ts index 1279e15de6..eb0975a33d 100644 --- a/test/plots/penguin-species-island-relative.ts +++ b/test/plots/penguin-species-island-relative.ts @@ -14,6 +14,6 @@ export async function penguinSpeciesIslandRelative() { data: penguins, x: "species" }, - marks: [Plot.barY(penguins, Plot.groupZ({y: "proportion-facet"}, {fill: "island"})), Plot.ruleY([0])] + marks: [Plot.barY(penguins, Plot.groupZ({y: "proportion-facet", sort: "z"}, {fill: "island"})), Plot.ruleY([0])] }); } diff --git a/test/plots/penguin-species-island.ts b/test/plots/penguin-species-island.ts index e164fb42a7..00be400d06 100644 --- a/test/plots/penguin-species-island.ts +++ b/test/plots/penguin-species-island.ts @@ -7,6 +7,6 @@ export async function penguinSpeciesIsland() { y: { grid: true }, - marks: [Plot.barY(data, Plot.groupX({y: "count"}, {x: "species", fill: "island"})), Plot.ruleY([0])] + marks: [Plot.barY(data, Plot.groupX({y: "count", sort: "z"}, {x: "species", fill: "island"})), Plot.ruleY([0])] }); } diff --git a/test/plots/sf-covid-deaths.ts b/test/plots/sf-covid-deaths.ts index f7ef2c2a14..282f8d0382 100644 --- a/test/plots/sf-covid-deaths.ts +++ b/test/plots/sf-covid-deaths.ts @@ -10,7 +10,8 @@ export async function sfCovidDeaths() { Plot.binX( { y: "sum", - filter: null + filter: null, + sort: "z" }, { x: "specimen_collection_date", diff --git a/test/plots/stargazers-hourly-group.ts b/test/plots/stargazers-hourly-group.ts index f96ea6e59c..96a4bcae4e 100644 --- a/test/plots/stargazers-hourly-group.ts +++ b/test/plots/stargazers-hourly-group.ts @@ -17,7 +17,7 @@ export async function stargazersHourlyGroup() { Plot.binX( {y: "count", interval: 1}, Plot.binX( - {x: (d) => Math.min(10, d.length), title: "first", thresholds: "hour"}, + {x: (d) => Math.min(10, d.length), title: "first", thresholds: "hour", sort: "z"}, {x: "date", fill: (d) => d.date.getUTCDay(), title: (d) => "SMTWTFS"[d.date.getUTCDay()]} ) ) diff --git a/test/plots/tip.ts b/test/plots/tip.ts index 7f48802072..4cecf671d3 100644 --- a/test/plots/tip.ts +++ b/test/plots/tip.ts @@ -27,7 +27,7 @@ export async function tipBin() { export async function tipBinStack() { const olympians = await d3.csv("data/athletes.csv", d3.autoType); - return Plot.rectY(olympians, Plot.binX({y: "count"}, {x: "weight", fill: "sex", tip: true})).plot(); + return Plot.rectY(olympians, Plot.binX({y: "count", sort: "z"}, {x: "weight", fill: "sex", tip: true})).plot(); } export async function tipCell() {