Skip to content

Commit

Permalink
expose a deduplicated ordinal domain (#1813)
Browse files Browse the repository at this point in the history
* expose a deduplicated ordinal domain

closes #1812

* use scale’s deduplicated domain

---------

Co-authored-by: Mike Bostock <[email protected]>
  • Loading branch information
Fil and mbostock authored Aug 16, 2023
1 parent b16a2be commit 76d4691
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/scales/ordinal.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ function createScaleO(key, scale, channels, {type, interval, domain, range, reve
if (domain === undefined) domain = inferDomain(channels, interval, key);
if (type === "categorical" || type === ordinalImplicit) type = "ordinal"; // shorthand for color schemes
if (reverse) domain = reverseof(domain);
scale.domain(domain);
domain = scale.domain(domain).domain(); // deduplicate
if (range !== undefined) {
// If the range is specified as a function, pass it the domain.
if (typeof range === "function") range = range(domain);
Expand Down
30 changes: 30 additions & 0 deletions test/scales/scales-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -2102,6 +2102,36 @@ it("plot(…).scale(name).apply and invert return the expected functions", () =>
]);
});

it("plot(…).scale(name) returns a deduplicated ordinal domain", () => {
const letters = "abbbcaabbcc";
const plot = Plot.dotX(letters).plot({x: {domain: letters}});
scaleEqual(plot.scale("x"), {
align: 0.5,
bandwidth: 0,
domain: ["a", "b", "c"],
padding: 0.5,
range: [20, 620],
round: true,
step: 200,
type: "point"
});
});

it("plot(…).scale(name) returns a deduplicated ordinal/temporal domain", () => {
const dates = ["2001", "2002", "2004", "2004"].map(d3.isoParse);
const plot = Plot.dotX(dates).plot({x: {type: "point", domain: dates}});
scaleEqual(plot.scale("x"), {
align: 0.5,
bandwidth: 0,
domain: dates.slice(0, 3),
padding: 0.5,
range: [20, 620],
round: true,
step: 200,
type: "point"
});
});

// Given a plot specification (or, as shorthand, an array of marks or a single
// mark), asserts that the given named scales, when materialized from the first
// plot and used to produce a second plot, produce the same output and the same
Expand Down

0 comments on commit 76d4691

Please sign in to comment.