From cf02423db1d6f36d88db6275349ec040e0678e68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philippe=20Rivi=C3=A8re?= Date: Thu, 27 Jan 2022 14:51:02 +0100 Subject: [PATCH 1/4] Use the mark's this.r if present, otherwise default to reading the options, then 3. follows [7a845f0] --- src/layouts/dodge.js | 5 +- test/output/penguinDodgeSymbol.html | 428 ++++++++++++++++++++++++++++ test/plots/index.js | 1 + test/plots/penguin-dodge-symbol.js | 19 ++ 4 files changed, 451 insertions(+), 2 deletions(-) create mode 100644 test/output/penguinDodgeSymbol.html create mode 100644 test/plots/penguin-dodge-symbol.js diff --git a/src/layouts/dodge.js b/src/layouts/dodge.js index 5e7371519b..f9226d2950 100644 --- a/src/layouts/dodge.js +++ b/src/layouts/dodge.js @@ -39,8 +39,9 @@ export function dodgeY(dodgeOptions = {}, options = {}) { } function dodge(y, x, anchor, padding, options) { - const [, r] = maybeNumberChannel(options.r, 3); - return layout(options, (I, scales, {[x]: X, r: R}, dimensions) => { + const [, r0] = maybeNumberChannel(options.r, 3); + return layout(options, function(I, scales, {[x]: X, r: R}, dimensions) { + const r = this.r == null ? r0 : this.r; if (X == null) throw new Error(`missing channel: ${x}`); let [ky, ty] = anchor(dimensions); const compare = ky ? compareAscending : compareSymmetric; diff --git a/test/output/penguinDodgeSymbol.html b/test/output/penguinDodgeSymbol.html new file mode 100644 index 0000000000..d0d5921ea2 --- /dev/null +++ b/test/output/penguinDodgeSymbol.html @@ -0,0 +1,428 @@ +
+
+ + + Adelie + + Chinstrap + + Gentoo +
+ + + + 3,000 + + + 3,500 + + + 4,000 + + + 4,500 + + + 5,000 + + + 5,500 + + + 6,000 + body_mass_g → + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/test/plots/index.js b/test/plots/index.js index df7cc1044e..23c029052c 100644 --- a/test/plots/index.js +++ b/test/plots/index.js @@ -88,6 +88,7 @@ export {default as ordinalBar} from "./ordinal-bar.js"; export {default as penguinCulmen} from "./penguin-culmen.js"; export {default as penguinCulmenArray} from "./penguin-culmen-array.js"; export {default as penguinDodge} from "./penguin-dodge.js"; +export {default as penguinDodgeSymbol} from "./penguin-dodge-symbol.js"; export {default as penguinFacetDodge} from "./penguin-facet-dodge.js"; export {default as penguinIslandUnknown} from "./penguin-island-unknown.js"; export {default as penguinMass} from "./penguin-mass.js"; diff --git a/test/plots/penguin-dodge-symbol.js b/test/plots/penguin-dodge-symbol.js new file mode 100644 index 0000000000..c00cd580e5 --- /dev/null +++ b/test/plots/penguin-dodge-symbol.js @@ -0,0 +1,19 @@ +import * as Plot from "@observablehq/plot"; +import * as d3 from "d3"; + +export default async function() { + const penguins = await d3.csv("data/penguins.csv", d3.autoType); + return Plot.plot({ + height: 220, + marks: [ + Plot.dot(penguins, Plot.dodgeY({ + x: "body_mass_g", + symbol: "species", + fill: "species", + stroke: "white", + strokeWidth: .5 + })) + ], + symbol: {legend: true} + }); +} From 465fa1ff2249dbfa263a972af677521306d40f58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philippe=20Rivi=C3=A8re?= Date: Thu, 27 Jan 2022 19:28:43 +0100 Subject: [PATCH 2/4] Update src/layouts/dodge.js Co-authored-by: Mike Bostock --- src/layouts/dodge.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/layouts/dodge.js b/src/layouts/dodge.js index f9226d2950..ecf9ccecbe 100644 --- a/src/layouts/dodge.js +++ b/src/layouts/dodge.js @@ -39,9 +39,8 @@ export function dodgeY(dodgeOptions = {}, options = {}) { } function dodge(y, x, anchor, padding, options) { - const [, r0] = maybeNumberChannel(options.r, 3); return layout(options, function(I, scales, {[x]: X, r: R}, dimensions) { - const r = this.r == null ? r0 : this.r; + const r = R ? undefined : this.r !== undefined ? +this.r : options.r !== undefined ? +options.r : 3; if (X == null) throw new Error(`missing channel: ${x}`); let [ky, ty] = anchor(dimensions); const compare = ky ? compareAscending : compareSymmetric; From beec1f0b37e025a91a9db080a795d9b2ed424304 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philippe=20Rivi=C3=A8re?= Date: Thu, 27 Jan 2022 19:30:39 +0100 Subject: [PATCH 3/4] superfluous import --- src/layouts/dodge.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/layouts/dodge.js b/src/layouts/dodge.js index ecf9ccecbe..e23cd05053 100644 --- a/src/layouts/dodge.js +++ b/src/layouts/dodge.js @@ -1,6 +1,5 @@ import {max} from "d3"; import IntervalTree from "interval-tree-1d"; -import {maybeNumberChannel} from "../options.js"; import {layout} from "./index.js"; const anchorXLeft = ({marginLeft}) => [1, marginLeft]; From 586175dc1ff203c3b0b75cbea0f086dcd2e03ebe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philippe=20Rivi=C3=A8re?= Date: Thu, 27 Jan 2022 20:01:04 +0100 Subject: [PATCH 4/4] Update src/layouts/dodge.js --- src/layouts/dodge.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/layouts/dodge.js b/src/layouts/dodge.js index e23cd05053..99fb199286 100644 --- a/src/layouts/dodge.js +++ b/src/layouts/dodge.js @@ -39,7 +39,7 @@ export function dodgeY(dodgeOptions = {}, options = {}) { function dodge(y, x, anchor, padding, options) { return layout(options, function(I, scales, {[x]: X, r: R}, dimensions) { - const r = R ? undefined : this.r !== undefined ? +this.r : options.r !== undefined ? +options.r : 3; + const r = R ? undefined : this.r !== undefined ? this.r : options.r !== undefined ? +options.r : 3; if (X == null) throw new Error(`missing channel: ${x}`); let [ky, ty] = anchor(dimensions); const compare = ky ? compareAscending : compareSymmetric;