From 7e9d0a3d557d9c19016649b9d79e9fc541b60dfc Mon Sep 17 00:00:00 2001 From: onc Date: Thu, 2 Jun 2022 16:06:47 +0200 Subject: [PATCH] feat: implementing oridinal colorscaling (#171) * feat: implementing oridinal colorscaling * Rewrite ScaleOridinal to fix typing issues * fix: make `schemeCategorical` start with lower letter * fix: rename `scale` to `valueAt` --- .../src/color/scaleOrdinal.ts | 36 +++++++++++++++++++ .../missing-coordinates/src/color/schemes.ts | 26 ++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 packages/missing-coordinates/src/color/scaleOrdinal.ts create mode 100644 packages/missing-coordinates/src/color/schemes.ts diff --git a/packages/missing-coordinates/src/color/scaleOrdinal.ts b/packages/missing-coordinates/src/color/scaleOrdinal.ts new file mode 100644 index 0000000..2605800 --- /dev/null +++ b/packages/missing-coordinates/src/color/scaleOrdinal.ts @@ -0,0 +1,36 @@ +export default class ScaleOrdinal { + // mapping from domain values to index. + private domainIndex = new Map(); + // domain of possible values + private domainItems: string[] = []; + // range to be projected to + private rangeItems: string[] = []; + + public valueAt(value: string | number): string | null { + const index = this.domainIndex.get(value.toString()); + if (index === undefined) { + return null; + } + return this.rangeItems[index % this.rangeItems.length]; + } + + public domain(newDomain: string[] | number[]): ScaleOrdinal { + this.domainItems = []; + this.domainIndex = new Map(); + + newDomain.forEach((value) => { + const stringValue = value.toString(); + if (!this.domainIndex.has(stringValue)) { + this.domainIndex.set(stringValue, this.domainItems.length); + this.domainItems.push(stringValue); + } + }); + + return this; + } + + public range(newRange: string[]): ScaleOrdinal { + this.rangeItems = newRange; + return this; + } +} diff --git a/packages/missing-coordinates/src/color/schemes.ts b/packages/missing-coordinates/src/color/schemes.ts new file mode 100644 index 0000000..4c73f9f --- /dev/null +++ b/packages/missing-coordinates/src/color/schemes.ts @@ -0,0 +1,26 @@ +export const schemeCategorical = { + Category10: [ + "#1F77B4", + "#FF7F0E", + "#2CA02C", + "#D62728", + "#9467BD", + "#8C564B", + "#E377C2", + "#7F7F7F", + "#BCBD22", + "#17BECF", + ], + Tableau10: [ + "#4E79A7", + "#F28E2C", + "#E15759", + "#76B7B2", + "#59A14F", + "#EDC949", + "#AF7AA1", + "#FF9DA7", + "#9C755F", + "#BAB0AB", + ], +};