@milaboratories/miplots4 1.0.164 → 1.0.166
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/index10.js +2 -5
- package/dist/_virtual/index10.js.map +1 -1
- package/dist/_virtual/index5.js +5 -2
- package/dist/_virtual/index5.js.map +1 -1
- package/dist/_virtual/index6.js +4 -4
- package/dist/_virtual/index7.js +1 -1
- package/dist/_virtual/index8.js +4 -4
- package/dist/_virtual/index9.js +3 -3
- package/dist/bubble/components/ChartsGroup.js +21 -21
- package/dist/bubble/components/ChartsGroup.js.map +1 -1
- package/dist/common/Tooltip.d.ts +2 -1
- package/dist/common/Tooltip.js +147 -143
- package/dist/common/Tooltip.js.map +1 -1
- package/dist/discrete/DiscreteSettingsImpl.d.ts +11 -31
- package/dist/discrete/DiscreteSettingsImpl.js.map +1 -1
- package/dist/discrete/components/Chart.js +143 -143
- package/dist/discrete/components/Chart.js.map +1 -1
- package/dist/discrete/layers/stats/pValueCalculation.js +5 -5
- package/dist/heatmap/components/ChartsGroup.js +9 -9
- package/dist/heatmap/components/ChartsGroup.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +4 -4
- package/dist/node_modules/.pnpm/scheduler@0.23.2/node_modules/scheduler/index.js +1 -1
- package/dist/scatterplot/components/ChartTooltip.js +34 -33
- package/dist/scatterplot/components/ChartTooltip.js.map +1 -1
- package/dist/scatterplot/components/ChartsGroup.js +31 -31
- package/dist/scatterplot/components/ChartsGroup.js.map +1 -1
- package/dist/scatterplot/dots.d.ts +2 -2
- package/dist/scatterplot/dots.js +9 -9
- package/dist/scatterplot/dots.js.map +1 -1
- package/dist/scatterplot/index.js +1 -1
- package/dist/scatterplot/index.js.map +1 -1
- package/dist/scatterplot/utils/sortDotsByGrouping.d.ts +2 -1
- package/dist/scatterplot/utils/sortDotsByGrouping.js +22 -11
- package/dist/scatterplot/utils/sortDotsByGrouping.js.map +1 -1
- package/dist/scatterplot-umap/ChartRenderer.d.ts +4 -3
- package/dist/scatterplot-umap/ChartRenderer.js +169 -164
- package/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
- package/dist/scatterplot-umap/components/Lasso.js +49 -49
- package/dist/scatterplot-umap/components/Lasso.js.map +1 -1
- package/dist/scatterplot-umap/components/SVGLayer.js +49 -49
- package/dist/scatterplot-umap/components/SVGLayer.js.map +1 -1
- package/dist/scatterplot-umap/components/UpperSVG.d.ts +1 -1
- package/dist/scatterplot-umap/components/UpperSVG.js +39 -38
- package/dist/scatterplot-umap/components/UpperSVG.js.map +1 -1
- package/dist/scatterplot-umap/constants.d.ts +6 -5
- package/dist/scatterplot-umap/constants.js +12 -11
- package/dist/scatterplot-umap/constants.js.map +1 -1
- package/dist/scatterplot-umap/index.d.ts +1 -0
- package/dist/scatterplot-umap/index.js +103 -83
- package/dist/scatterplot-umap/index.js.map +1 -1
- package/dist/types/bubble.js +32 -37
- package/dist/types/bubble.js.map +1 -1
- package/dist/types/common.d.ts +42 -0
- package/dist/types/common.js +39 -35
- package/dist/types/common.js.map +1 -1
- package/dist/types/discrete.d.ts +680 -70
- package/dist/types/discrete.js +141 -141
- package/dist/types/discrete.js.map +1 -1
- package/dist/types/heatmap.js +54 -59
- package/dist/types/heatmap.js.map +1 -1
- package/dist/types/scatterplot-umap.js +19 -24
- package/dist/types/scatterplot-umap.js.map +1 -1
- package/dist/types/scatterplot.js +41 -46
- package/dist/types/scatterplot.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DataFrame } from '../DataFrame';
|
|
2
2
|
import { ColumnName, DataValue } from '../types';
|
|
3
|
-
import { ScatterplotSettingsImpl } from './ScatterplotSettingsImpl';
|
|
3
|
+
import { DotsLayer, ScatterplotSettingsImpl } from './ScatterplotSettingsImpl';
|
|
4
4
|
export type Dot = {
|
|
5
5
|
idx: number;
|
|
6
6
|
x: string | number;
|
|
@@ -15,4 +15,4 @@ export type GroupedDots = Record<string, {
|
|
|
15
15
|
maxY: number;
|
|
16
16
|
dots: Dot[];
|
|
17
17
|
}>;
|
|
18
|
-
export declare function getDots(data: DataFrame, facetKeysCombinations: string[][], x: ColumnName, y: ColumnName, label: ColumnName | null, highlight: ColumnName | null, grouping: ScatterplotSettingsImpl['grouping'], xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'], yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis']): GroupedDots;
|
|
18
|
+
export declare function getDots(data: DataFrame, facetKeysCombinations: string[][], x: ColumnName, y: ColumnName, label: ColumnName | null, highlight: ColumnName | null, grouping: ScatterplotSettingsImpl['grouping'], xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'], yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis'], dotsLayer?: DotsLayer): GroupedDots;
|
package/dist/scatterplot/dots.js
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import { formatColumnValue as
|
|
2
|
-
import { sortDotsByGrouping as
|
|
3
|
-
import { format as
|
|
4
|
-
function
|
|
5
|
-
const l = {},
|
|
1
|
+
import { formatColumnValue as F } from "./utils/formatColumnValue.js";
|
|
2
|
+
import { sortDotsByGrouping as G } from "./utils/sortDotsByGrouping.js";
|
|
3
|
+
import { format as X } from "../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/defaultLocale.js";
|
|
4
|
+
function h(t, x, v, I, o, m, g, C, M, V) {
|
|
5
|
+
const l = {}, d = o != null && o.format ? X(o.format) : void 0;
|
|
6
6
|
for (const p of x) {
|
|
7
7
|
const r = [];
|
|
8
8
|
let s = 1 / 0, u = 1 / 0, f = -1 / 0, c = -1 / 0;
|
|
9
|
-
const
|
|
9
|
+
const w = p.concat([""]), y = t.getRowsByGrouping(w);
|
|
10
10
|
for (let a = 0; a < y.length; a++) {
|
|
11
11
|
const n = y[a], e = t.getColumnValue(v.value, n), i = t.getColumnValue(I.value, n);
|
|
12
12
|
C.scale !== "discrete" && (typeof e != "number" || !isFinite(e)) || M.scale !== "discrete" && (typeof i != "number" || !isFinite(i)) || (s = Math.min(s, e), u = Math.min(u, i), f = Math.max(f, e), c = Math.max(c, i), r.push({
|
|
13
13
|
x: e,
|
|
14
14
|
y: i,
|
|
15
|
-
label:
|
|
15
|
+
label: F(t, n, o, d),
|
|
16
16
|
dimmed: m ? !t.getColumnValue(m.value, n) : !1,
|
|
17
17
|
idx: n
|
|
18
18
|
}));
|
|
19
19
|
}
|
|
20
|
-
|
|
20
|
+
G(t, r, g, m, V), l[p.join("_")] = {
|
|
21
21
|
minX: s,
|
|
22
22
|
maxX: f,
|
|
23
23
|
minY: u,
|
|
@@ -28,6 +28,6 @@ function D(t, x, v, I, o, m, g, C, M) {
|
|
|
28
28
|
return l;
|
|
29
29
|
}
|
|
30
30
|
export {
|
|
31
|
-
|
|
31
|
+
h as getDots
|
|
32
32
|
};
|
|
33
33
|
//# sourceMappingURL=dots.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dots.js","sources":["../../src/scatterplot/dots.ts"],"sourcesContent":["import {format} from 'd3-format';\nimport type { DataFrame } from '../DataFrame';\nimport type { ColumnName, DataValue } from '../types';\nimport type { ScatterplotSettingsImpl } from './ScatterplotSettingsImpl';\nimport {formatColumnValue} from './utils/formatColumnValue';\nimport {sortDotsByGrouping} from './utils/sortDotsByGrouping';\n\nexport type Dot = {\n idx: number;\n x: string | number;\n y: string | number;\n label: DataValue | null;\n dimmed: boolean;\n};\n\nexport type GroupedDots = Record<\n string,\n {\n minX: number;\n maxX: number;\n minY: number;\n maxY: number;\n dots: Dot[];\n }\n>;\n\nexport function getDots(\n data: DataFrame,\n facetKeysCombinations: string[][],\n x: ColumnName,\n y: ColumnName,\n label: ColumnName | null,\n highlight: ColumnName | null,\n grouping: ScatterplotSettingsImpl['grouping'],\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'],\n yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis']\n): GroupedDots {\n const result: GroupedDots = {};\n\n const labelFormatter = label?.format ? format(label.format) : undefined;\n\n for (const facetKeys of facetKeysCombinations) {\n const dots: Dot[] = [];\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n const templateGroupPath = facetKeys.concat(['']);\n const rows = data.getRowsByGrouping(templateGroupPath);\n\n for (let i = 0; i < rows.length; i++) {\n const rowIdx = rows[i];\n const valueX = data.getColumnValue(x.value, rowIdx) as number;\n const valueY = data.getColumnValue(y.value, rowIdx) as number;\n\n if (xAxis.scale !== 'discrete' && (typeof valueX !== 'number' || !isFinite(valueX))) {\n continue;\n }\n if (yAxis.scale !== 'discrete' && (typeof valueY !== 'number' || !isFinite(valueY))) {\n continue;\n }\n\n minX = Math.min(minX, valueX);\n minY = Math.min(minY, valueY);\n maxX = Math.max(maxX, valueX);\n maxY = Math.max(maxY, valueY);\n\n dots.push({\n x: valueX,\n y: valueY,\n label: formatColumnValue(data, rowIdx, label, labelFormatter),\n dimmed: highlight ? !data.getColumnValue(highlight.value, rowIdx) : false,\n idx: rowIdx\n });\n }\n\n sortDotsByGrouping(data, dots, grouping, highlight);\n\n result[facetKeys.join('_')] = {\n minX,\n maxX,\n minY,\n maxY,\n dots,\n };\n }\n\n return result;\n}\n"],"names":["getDots","data","facetKeysCombinations","x","y","label","highlight","grouping","xAxis","yAxis","result","labelFormatter","format","facetKeys","dots","minX","minY","maxX","maxY","templateGroupPath","rows","i","rowIdx","valueX","valueY","formatColumnValue","sortDotsByGrouping"],"mappings":";;;AA0BO,SAASA,EACZC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACW;AACX,QAAMC,IAAsB,CAAA,GAEtBC,
|
|
1
|
+
{"version":3,"file":"dots.js","sources":["../../src/scatterplot/dots.ts"],"sourcesContent":["import {format} from 'd3-format';\nimport type { DataFrame } from '../DataFrame';\nimport type { ColumnName, DataValue } from '../types';\nimport type { DotsLayer, ScatterplotSettingsImpl } from './ScatterplotSettingsImpl';\nimport {formatColumnValue} from './utils/formatColumnValue';\nimport {sortDotsByGrouping} from './utils/sortDotsByGrouping';\n\nexport type Dot = {\n idx: number;\n x: string | number;\n y: string | number;\n label: DataValue | null;\n dimmed: boolean;\n};\n\nexport type GroupedDots = Record<\n string,\n {\n minX: number;\n maxX: number;\n minY: number;\n maxY: number;\n dots: Dot[];\n }\n>;\n\nexport function getDots(\n data: DataFrame,\n facetKeysCombinations: string[][],\n x: ColumnName,\n y: ColumnName,\n label: ColumnName | null,\n highlight: ColumnName | null,\n grouping: ScatterplotSettingsImpl['grouping'],\n xAxis: ScatterplotSettingsImpl['chartSettings']['xAxis'],\n yAxis: ScatterplotSettingsImpl['chartSettings']['yAxis'],\n dotsLayer?: DotsLayer\n): GroupedDots {\n const result: GroupedDots = {};\n\n const labelFormatter = label?.format ? format(label.format) : undefined;\n\n for (const facetKeys of facetKeysCombinations) {\n const dots: Dot[] = [];\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n const templateGroupPath = facetKeys.concat(['']);\n const rows = data.getRowsByGrouping(templateGroupPath);\n\n for (let i = 0; i < rows.length; i++) {\n const rowIdx = rows[i];\n const valueX = data.getColumnValue(x.value, rowIdx) as number;\n const valueY = data.getColumnValue(y.value, rowIdx) as number;\n\n if (xAxis.scale !== 'discrete' && (typeof valueX !== 'number' || !isFinite(valueX))) {\n continue;\n }\n if (yAxis.scale !== 'discrete' && (typeof valueY !== 'number' || !isFinite(valueY))) {\n continue;\n }\n\n minX = Math.min(minX, valueX);\n minY = Math.min(minY, valueY);\n maxX = Math.max(maxX, valueX);\n maxY = Math.max(maxY, valueY);\n\n dots.push({\n x: valueX,\n y: valueY,\n label: formatColumnValue(data, rowIdx, label, labelFormatter),\n dimmed: highlight ? !data.getColumnValue(highlight.value, rowIdx) : false,\n idx: rowIdx\n });\n }\n\n sortDotsByGrouping(data, dots, grouping, highlight, dotsLayer);\n\n result[facetKeys.join('_')] = {\n minX,\n maxX,\n minY,\n maxY,\n dots,\n };\n }\n\n return result;\n}\n"],"names":["getDots","data","facetKeysCombinations","x","y","label","highlight","grouping","xAxis","yAxis","dotsLayer","result","labelFormatter","format","facetKeys","dots","minX","minY","maxX","maxY","templateGroupPath","rows","i","rowIdx","valueX","valueY","formatColumnValue","sortDotsByGrouping"],"mappings":";;;AA0BO,SAASA,EACZC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACW;AACX,QAAMC,IAAsB,CAAA,GAEtBC,IAAiBP,KAAA,QAAAA,EAAO,SAASQ,EAAOR,EAAM,MAAM,IAAI;AAE9D,aAAWS,KAAaZ,GAAuB;AAC3C,UAAMa,IAAc,CAAA;AACpB,QAAIC,IAAO,OACPC,IAAO,OACPC,IAAO,QACPC,IAAO;AAEX,UAAMC,IAAoBN,EAAU,OAAO,CAAC,EAAE,CAAC,GACzCO,IAAOpB,EAAK,kBAAkBmB,CAAiB;AAErD,aAASE,IAAI,GAAGA,IAAID,EAAK,QAAQC,KAAK;AAClC,YAAMC,IAASF,EAAKC,CAAC,GACfE,IAASvB,EAAK,eAAeE,EAAE,OAAOoB,CAAM,GAC5CE,IAASxB,EAAK,eAAeG,EAAE,OAAOmB,CAAM;AAElD,MAAIf,EAAM,UAAU,eAAe,OAAOgB,KAAW,YAAY,CAAC,SAASA,CAAM,MAG7Ef,EAAM,UAAU,eAAe,OAAOgB,KAAW,YAAY,CAAC,SAASA,CAAM,OAIjFT,IAAO,KAAK,IAAIA,GAAMQ,CAAM,GAC5BP,IAAO,KAAK,IAAIA,GAAMQ,CAAM,GAC5BP,IAAO,KAAK,IAAIA,GAAMM,CAAM,GAC5BL,IAAO,KAAK,IAAIA,GAAMM,CAAM,GAE5BV,EAAK,KAAK;AAAA,QACN,GAAGS;AAAA,QACH,GAAGC;AAAA,QACH,OAAOC,EAAkBzB,GAAMsB,GAAQlB,GAAOO,CAAc;AAAA,QAC5D,QAAQN,IAAY,CAACL,EAAK,eAAeK,EAAU,OAAOiB,CAAM,IAAI;AAAA,QACpE,KAAKA;AAAA,MAAA,CACR;AAAA,IACL;AAEA,IAAAI,EAAmB1B,GAAMc,GAAMR,GAAUD,GAAWI,CAAS,GAE7DC,EAAOG,EAAU,KAAK,GAAG,CAAC,IAAI;AAAA,MAC1B,MAAAE;AAAA,MACA,MAAAE;AAAA,MACA,MAAAD;AAAA,MACA,MAAAE;AAAA,MACA,MAAAJ;AAAA,IAAA;AAAA,EAER;AAEA,SAAOJ;AACX;"}
|
|
@@ -92,7 +92,7 @@ class ut extends G {
|
|
|
92
92
|
const L = {
|
|
93
93
|
x: this.data.getColumn(t.value).every((r) => r === null || !(Number(r) < 0)),
|
|
94
94
|
y: this.data.getColumn(e.value).every((r) => r === null || !(Number(r) < 0))
|
|
95
|
-
}, E = s.map((r) => r.columnName), D = F(this.data, y, t, e, o, n, s, c.xAxis, c.yAxis), f = Object.keys(D);
|
|
95
|
+
}, E = s.map((r) => r.columnName), D = F(this.data, y, t, e, o, n, s, c.xAxis, c.yAxis, i.find((r) => r.type === "dots")), f = Object.keys(D);
|
|
96
96
|
if (f.length > I) {
|
|
97
97
|
const r = {
|
|
98
98
|
type: "tooManyFacets",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/scatterplot/index.ts"],"sourcesContent":["import { renderToString } from 'react-dom/server';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame } from '../DataFrame';\nimport type {\n ErrorInfoScatterplotGroupsX,\n ErrorInfoScatterplotGroupsY} from '../types';\nimport {\n type AesItem,\n type AxisSettings,\n type AxisSettingsDiscrete,\n type Category,\n type ColumnName,\n type ContinuousAesFromColumn,\n type ErrorInfoFacets,\n getUnknownErrorInfo,\n type InheritAesScatterplot,\n isErrorInfo,\n type ScatterplotEventHandlers,\n type ScatterplotLegendInfo,\n type ScatterplotSettings,\n} from '../types';\nimport { arraysAreDifferent } from '../utils/arraysAreDifferent';\nimport { getKeysCombinations } from '../utils/getKeysCombination';\nimport ChartRenderer from './ChartRenderer';\nimport type { GroupedDots } from './dots';\nimport { getDots } from './dots';\nimport type { ScatterplotLayerData } from './getLayersData';\nimport { getLayersData } from './getLayersData';\nimport type { TrendsData } from './linearRegression';\nimport { getRegressionData } from './linearRegression';\nimport { ScatterplotSettingsImpl } from './ScatterplotSettingsImpl';\nimport { addPalettesToAesMapping, createLegendInfo } from './utils/createLegendInfo';\nimport type { DiscreteAxisData } from './components/types';\nimport { MAX_FACETS_COUNT, MAX_GROUPS_COUNT } from '../constants';\n\nfunction isInheritMapping<T extends (string | number)>(value:T | InheritAesScatterplot | ContinuousAesFromColumn<T>):value is InheritAesScatterplot {\n return typeof value === 'object' && 'type' in value && value.type === 'grouping';\n}\n\nfunction getDiscreteAxisData(data: DataFrame, axis: AxisSettings, column: ColumnName): DiscreteAxisData {\n if (axis.scale === 'discrete') {\n const keys = axis.keys ? axis.keys : data.getColumnCategories(column.value);\n return {keys, labels: keys.reduce((res, v) => {\n const labelsMap = axis.labels ?? {};\n const labelValue = labelsMap[v] ?? (column.valueLabels ? data.getColumnValue(column.valueLabels, data.getColumnCategoryRowIndex(column.value, v as Category)) : v);\n res[v] = String(labelValue);\n return res;\n }, {} as Record<string, string>)};\n }\n return {keys: [], labels: {}};\n}\n\nexport class ChartScatterplot extends AbstractChart {\n settings: ScatterplotSettingsImpl;\n chartRenderer: ChartRenderer;\n\n onTooltipHintSwitch: (v:boolean) => void = () => undefined;\n calculatedData: {\n onlyPositive: {x: boolean; y: boolean};\n dotsByFacets: GroupedDots;\n facetKeys: string[];\n facetKeysCombinations: string[][];\n trendsData: TrendsData | null;\n legendLabels: ScatterplotLegendInfo;\n layersData: Record<string, ScatterplotLayerData[]>;\n discreteAxisDataX: DiscreteAxisData;\n discreteAxisDataY: DiscreteAxisData;\n } | null = null;\n\n constructor(data: DataFrame, settings: ScatterplotSettings, eventHandlers?:ScatterplotEventHandlers) {\n super(data, settings);\n\n this.chartRenderer = new ChartRenderer();\n this.settings = new ScatterplotSettingsImpl(settings);\n if (eventHandlers) {\n this.onTooltipHintSwitch = eventHandlers.onTooltipHintSwitch;\n }\n }\n\n mount(node: HTMLElement) {\n try {\n this.chartRenderer.init(node);\n this._updateData();\n this._updateChart();\n this.hasError = false;\n this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n unmount() {\n this.chartRenderer.clear();\n }\n\n updateSettingsAndData(data: DataFrame, settings: ScatterplotSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new ScatterplotSettingsImpl(settings);\n this.data = data;\n if (\n this._needUpdateCalculatedDataBySettings(previousSettings, this.settings) ||\n this._needUpdateCalculatedDataByData(previousData, this.data)\n ) {\n this._updateData();\n } else {\n this._updateAesInData();\n }\n this._updateChart();\n this.hasError = false;\n this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n console.error(err);\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n updateChartState(_field: string, _value: unknown) {\n console.warn('no chart state for scatterplot');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: ScatterplotSettingsImpl, settings: ScatterplotSettingsImpl) {\n return (\n prevSettings.facetBy.some((el, idx) => el.value !== settings.facetBy[idx]?.value) ||\n prevSettings.grouping.length !== settings.grouping.length ||\n arraysAreDifferent(\n prevSettings.grouping.map(v => v.columnName.value),\n settings.grouping.map(v => v.columnName.value),\n ) ||\n prevSettings.grouping.some((v, idx) => arraysAreDifferent(v.order, settings.grouping?.[idx].order)) ||\n arraysAreDifferent((prevSettings.chartSettings.xAxis as AxisSettingsDiscrete).keys, (settings.chartSettings.xAxis as AxisSettingsDiscrete).keys) ||\n arraysAreDifferent((prevSettings.chartSettings.yAxis as AxisSettingsDiscrete).keys, (settings.chartSettings.yAxis as AxisSettingsDiscrete).keys) ||\n (prevSettings.label?.value || settings.label?.value) && prevSettings.label?.value !== settings.label?.value ||\n prevSettings.layers.length !== settings.layers.length ||\n prevSettings.layers.some((l, idx) => l.type !== settings.layers[idx].type) ||\n Boolean(prevSettings.trend) !== Boolean(settings.trend)\n );\n }\n\n _needUpdateCalculatedDataByData(prevData: DataFrame, data: DataFrame) {\n const prevKeys = Object.keys(prevData.data);\n const keys = Object.keys(data.data);\n return (\n prevData.id !== data.id ||\n prevKeys.length !== keys.length ||\n prevKeys.some(key => prevData.data[key].length !== data.data[key]?.length)\n );\n }\n\n _updateData() {\n const {x, y, facetBy, grouping, trend, layers, label, highlight, chartSettings} = this.settings;\n const facetKeysLists = facetBy.map(column => this.data.getColumnCategories(column.value)).filter(v => v.length > 0);\n const categoryGroupingKeysLists = grouping.map(({columnName}) => this.data.getColumnCategories(columnName.value)).filter(v => v.length > 0);\n\n const facetKeysCombinations = facetKeysLists.length\n ? getKeysCombinations(facetKeysLists)\n : [['null']];\n const categoryGroupingCombinations = categoryGroupingKeysLists.length\n ? getKeysCombinations(categoryGroupingKeysLists)\n : [['null']];\n\n const facetGroupingValues = facetBy.map(column => column.value) ?? null;\n\n this.data.setGrouping([...facetGroupingValues]);\n const onlyPositive = {\n x: this.data.getColumn(x.value).every(v => {\n return v === null || !(Number(v) < 0);\n }),\n y: this.data.getColumn(y.value).every(v => {\n return v === null || !(Number(v) < 0);\n }),\n };\n\n const groupingColumns = grouping.map(v => v.columnName);\n\n const dotsByFacets = getDots(this.data, facetKeysCombinations, x, y, label, highlight, grouping, chartSettings.xAxis, chartSettings.yAxis);\n const facetKeys = Object.keys(dotsByFacets);\n\n if (facetKeys.length > MAX_FACETS_COUNT) {\n const errorInfo: ErrorInfoFacets = {\n type: 'tooManyFacets',\n info: {count: facetKeys.length, maxCount: MAX_FACETS_COUNT}\n };\n throw Error(errorInfo.type, {cause: errorInfo});\n }\n\n const trendsData = getRegressionData(this.data, dotsByFacets, facetKeys, categoryGroupingCombinations, groupingColumns, trend);\n\n const discreteAxisDataX = getDiscreteAxisData(this.data, chartSettings.xAxis, x);\n const discreteAxisDataY = getDiscreteAxisData(this.data, chartSettings.yAxis, y);\n\n if (discreteAxisDataX.keys.length > MAX_GROUPS_COUNT) {\n const errorInfo: ErrorInfoScatterplotGroupsX = {\n type: 'tooManyScatterplotGroupsX',\n info: {count: discreteAxisDataX.keys.length, maxCount: MAX_GROUPS_COUNT}\n };\n throw Error(errorInfo.type, {cause: errorInfo});\n }\n if (discreteAxisDataY.keys.length > MAX_GROUPS_COUNT) {\n const errorInfo: ErrorInfoScatterplotGroupsY = {\n type: 'tooManyScatterplotGroupsY',\n info: {count: discreteAxisDataY.keys.length, maxCount: MAX_GROUPS_COUNT}\n };\n throw Error(errorInfo.type, {cause: errorInfo});\n }\n const legendLabels = createLegendInfo(this.data, grouping, layers);\n const layersData = getLayersData(this.data, layers, facetKeys, dotsByFacets, categoryGroupingCombinations, groupingColumns, chartSettings.xAxis, discreteAxisDataX);\n\n this.calculatedData = {\n onlyPositive,\n dotsByFacets,\n facetKeys,\n facetKeysCombinations,\n trendsData,\n legendLabels,\n layersData,\n discreteAxisDataX,\n discreteAxisDataY\n };\n }\n\n _updateAesInData() {\n const calculated = this.calculatedData;\n if (!calculated) {\n return;\n }\n const {grouping, trend, layers} = this.settings;\n const {facetKeys, trendsData} = calculated;\n\n facetKeys.forEach(facetKey => {\n for (let i = 0; i < layers.length; i++) {\n calculated.layersData[facetKey][i].info = layers[i];\n }\n });\n\n grouping.forEach(({columnName, inheritedAes}) => {\n const usedAes = new Set<keyof AesItem>();\n const usedAesFromPalettes: Partial<Record<keyof AesItem, string[]>> = {}; // if there is palette in mapping then\n layers.forEach(layer => {\n if (layer.aes) {\n Object.entries(layer.aes).forEach(([key, value]) => {\n if (isInheritMapping(value) && value.value === columnName.value) {\n usedAes.add(key as keyof AesItem);\n if (value.palette) {\n usedAesFromPalettes[key as keyof AesItem] = value.palette;\n }\n }\n });\n }\n });\n calculated.legendLabels[columnName.value].usedAes = [...usedAes];\n calculated.legendLabels[columnName.value].aesMap = addPalettesToAesMapping(\n columnName,\n usedAesFromPalettes,\n inheritedAes\n );\n });\n if (trendsData && trend) {\n Object.keys(trendsData).forEach((key) => {\n trendsData[key].forEach(trendInfo => {\n trendInfo.color = trend.color;\n trendInfo.bounded = trend.bounded;\n });\n });\n }\n }\n\n _updateChart() {\n if (!this.calculatedData) {\n return;\n }\n const {id, chartSettings, facetSettings, grouping, keyColumn, layers, trend} = this.settings;\n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n facetSettings,\n this.calculatedData.facetKeys,\n this.calculatedData.facetKeysCombinations, //for titles, if facet by more than 1 column\n this.calculatedData.dotsByFacets,\n this.calculatedData.trendsData,\n keyColumn,\n this.calculatedData.onlyPositive,\n this.calculatedData.legendLabels,\n this.calculatedData.layersData,\n grouping.map(v => v.columnName),\n layers,\n trend,\n this.calculatedData.discreteAxisDataX,\n this.calculatedData.discreteAxisDataY,\n this.onTooltipHintSwitch\n );\n }\n}\n"],"names":["isInheritMapping","value","getDiscreteAxisData","data","axis","column","keys","res","v","labelValue","ChartScatterplot","AbstractChart","settings","eventHandlers","__publicField","ChartRenderer","ScatterplotSettingsImpl","node","err","isErrorInfo","getUnknownErrorInfo","previousSettings","previousData","_field","_value","renderToString","prevSettings","el","idx","_a","arraysAreDifferent","_b","_c","_d","l","prevData","prevKeys","key","x","y","facetBy","grouping","trend","layers","label","highlight","chartSettings","facetKeysLists","categoryGroupingKeysLists","columnName","facetKeysCombinations","getKeysCombinations","categoryGroupingCombinations","facetGroupingValues","onlyPositive","groupingColumns","dotsByFacets","getDots","facetKeys","MAX_FACETS_COUNT","errorInfo","trendsData","getRegressionData","discreteAxisDataX","discreteAxisDataY","MAX_GROUPS_COUNT","legendLabels","createLegendInfo","layersData","getLayersData","calculated","facetKey","i","inheritedAes","usedAes","usedAesFromPalettes","layer","addPalettesToAesMapping","trendInfo","id","facetSettings","keyColumn"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/scatterplot/index.ts"],"sourcesContent":["import { renderToString } from 'react-dom/server';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame } from '../DataFrame';\nimport type {\n ErrorInfoScatterplotGroupsX,\n ErrorInfoScatterplotGroupsY} from '../types';\nimport {\n type AesItem,\n type AxisSettings,\n type AxisSettingsDiscrete,\n type Category,\n type ColumnName,\n type ContinuousAesFromColumn,\n type ErrorInfoFacets,\n getUnknownErrorInfo,\n type InheritAesScatterplot,\n isErrorInfo,\n type ScatterplotEventHandlers,\n type ScatterplotLegendInfo,\n type ScatterplotSettings,\n} from '../types';\nimport { arraysAreDifferent } from '../utils/arraysAreDifferent';\nimport { getKeysCombinations } from '../utils/getKeysCombination';\nimport ChartRenderer from './ChartRenderer';\nimport type { GroupedDots } from './dots';\nimport { getDots } from './dots';\nimport type { ScatterplotLayerData } from './getLayersData';\nimport { getLayersData } from './getLayersData';\nimport type { TrendsData } from './linearRegression';\nimport { getRegressionData } from './linearRegression';\nimport { ScatterplotSettingsImpl } from './ScatterplotSettingsImpl';\nimport { addPalettesToAesMapping, createLegendInfo } from './utils/createLegendInfo';\nimport type { DiscreteAxisData } from './components/types';\nimport { MAX_FACETS_COUNT, MAX_GROUPS_COUNT } from '../constants';\n\nfunction isInheritMapping<T extends (string | number)>(value:T | InheritAesScatterplot | ContinuousAesFromColumn<T>):value is InheritAesScatterplot {\n return typeof value === 'object' && 'type' in value && value.type === 'grouping';\n}\n\nfunction getDiscreteAxisData(data: DataFrame, axis: AxisSettings, column: ColumnName): DiscreteAxisData {\n if (axis.scale === 'discrete') {\n const keys = axis.keys ? axis.keys : data.getColumnCategories(column.value);\n return {keys, labels: keys.reduce((res, v) => {\n const labelsMap = axis.labels ?? {};\n const labelValue = labelsMap[v] ?? (column.valueLabels ? data.getColumnValue(column.valueLabels, data.getColumnCategoryRowIndex(column.value, v as Category)) : v);\n res[v] = String(labelValue);\n return res;\n }, {} as Record<string, string>)};\n }\n return {keys: [], labels: {}};\n}\n\nexport class ChartScatterplot extends AbstractChart {\n settings: ScatterplotSettingsImpl;\n chartRenderer: ChartRenderer;\n\n onTooltipHintSwitch: (v:boolean) => void = () => undefined;\n calculatedData: {\n onlyPositive: {x: boolean; y: boolean};\n dotsByFacets: GroupedDots;\n facetKeys: string[];\n facetKeysCombinations: string[][];\n trendsData: TrendsData | null;\n legendLabels: ScatterplotLegendInfo;\n layersData: Record<string, ScatterplotLayerData[]>;\n discreteAxisDataX: DiscreteAxisData;\n discreteAxisDataY: DiscreteAxisData;\n } | null = null;\n\n constructor(data: DataFrame, settings: ScatterplotSettings, eventHandlers?:ScatterplotEventHandlers) {\n super(data, settings);\n\n this.chartRenderer = new ChartRenderer();\n this.settings = new ScatterplotSettingsImpl(settings);\n if (eventHandlers) {\n this.onTooltipHintSwitch = eventHandlers.onTooltipHintSwitch;\n }\n }\n\n mount(node: HTMLElement) {\n try {\n this.chartRenderer.init(node);\n this._updateData();\n this._updateChart();\n this.hasError = false;\n this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n unmount() {\n this.chartRenderer.clear();\n }\n\n updateSettingsAndData(data: DataFrame, settings: ScatterplotSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new ScatterplotSettingsImpl(settings);\n this.data = data;\n if (\n this._needUpdateCalculatedDataBySettings(previousSettings, this.settings) ||\n this._needUpdateCalculatedDataByData(previousData, this.data)\n ) {\n this._updateData();\n } else {\n this._updateAesInData();\n }\n this._updateChart();\n this.hasError = false;\n this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n console.error(err);\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n updateChartState(_field: string, _value: unknown) {\n console.warn('no chart state for scatterplot');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: ScatterplotSettingsImpl, settings: ScatterplotSettingsImpl) {\n return (\n prevSettings.facetBy.some((el, idx) => el.value !== settings.facetBy[idx]?.value) ||\n prevSettings.grouping.length !== settings.grouping.length ||\n arraysAreDifferent(\n prevSettings.grouping.map(v => v.columnName.value),\n settings.grouping.map(v => v.columnName.value),\n ) ||\n prevSettings.grouping.some((v, idx) => arraysAreDifferent(v.order, settings.grouping?.[idx].order)) ||\n arraysAreDifferent((prevSettings.chartSettings.xAxis as AxisSettingsDiscrete).keys, (settings.chartSettings.xAxis as AxisSettingsDiscrete).keys) ||\n arraysAreDifferent((prevSettings.chartSettings.yAxis as AxisSettingsDiscrete).keys, (settings.chartSettings.yAxis as AxisSettingsDiscrete).keys) ||\n (prevSettings.label?.value || settings.label?.value) && prevSettings.label?.value !== settings.label?.value ||\n prevSettings.layers.length !== settings.layers.length ||\n prevSettings.layers.some((l, idx) => l.type !== settings.layers[idx].type) ||\n Boolean(prevSettings.trend) !== Boolean(settings.trend)\n );\n }\n\n _needUpdateCalculatedDataByData(prevData: DataFrame, data: DataFrame) {\n const prevKeys = Object.keys(prevData.data);\n const keys = Object.keys(data.data);\n return (\n prevData.id !== data.id ||\n prevKeys.length !== keys.length ||\n prevKeys.some(key => prevData.data[key].length !== data.data[key]?.length)\n );\n }\n\n _updateData() {\n const {x, y, facetBy, grouping, trend, layers, label, highlight, chartSettings} = this.settings;\n const facetKeysLists = facetBy.map(column => this.data.getColumnCategories(column.value)).filter(v => v.length > 0);\n const categoryGroupingKeysLists = grouping.map(({columnName}) => this.data.getColumnCategories(columnName.value)).filter(v => v.length > 0);\n\n const facetKeysCombinations = facetKeysLists.length\n ? getKeysCombinations(facetKeysLists)\n : [['null']];\n const categoryGroupingCombinations = categoryGroupingKeysLists.length\n ? getKeysCombinations(categoryGroupingKeysLists)\n : [['null']];\n\n const facetGroupingValues = facetBy.map(column => column.value) ?? null;\n\n this.data.setGrouping([...facetGroupingValues]);\n const onlyPositive = {\n x: this.data.getColumn(x.value).every(v => {\n return v === null || !(Number(v) < 0);\n }),\n y: this.data.getColumn(y.value).every(v => {\n return v === null || !(Number(v) < 0);\n }),\n };\n\n const groupingColumns = grouping.map(v => v.columnName);\n\n const dotsByFacets = getDots(this.data, facetKeysCombinations, x, y, label, highlight, grouping, chartSettings.xAxis, chartSettings.yAxis, layers.find(l => l.type === 'dots'));\n const facetKeys = Object.keys(dotsByFacets);\n\n if (facetKeys.length > MAX_FACETS_COUNT) {\n const errorInfo: ErrorInfoFacets = {\n type: 'tooManyFacets',\n info: {count: facetKeys.length, maxCount: MAX_FACETS_COUNT}\n };\n throw Error(errorInfo.type, {cause: errorInfo});\n }\n\n const trendsData = getRegressionData(this.data, dotsByFacets, facetKeys, categoryGroupingCombinations, groupingColumns, trend);\n\n const discreteAxisDataX = getDiscreteAxisData(this.data, chartSettings.xAxis, x);\n const discreteAxisDataY = getDiscreteAxisData(this.data, chartSettings.yAxis, y);\n\n if (discreteAxisDataX.keys.length > MAX_GROUPS_COUNT) {\n const errorInfo: ErrorInfoScatterplotGroupsX = {\n type: 'tooManyScatterplotGroupsX',\n info: {count: discreteAxisDataX.keys.length, maxCount: MAX_GROUPS_COUNT}\n };\n throw Error(errorInfo.type, {cause: errorInfo});\n }\n if (discreteAxisDataY.keys.length > MAX_GROUPS_COUNT) {\n const errorInfo: ErrorInfoScatterplotGroupsY = {\n type: 'tooManyScatterplotGroupsY',\n info: {count: discreteAxisDataY.keys.length, maxCount: MAX_GROUPS_COUNT}\n };\n throw Error(errorInfo.type, {cause: errorInfo});\n }\n const legendLabels = createLegendInfo(this.data, grouping, layers);\n const layersData = getLayersData(this.data, layers, facetKeys, dotsByFacets, categoryGroupingCombinations, groupingColumns, chartSettings.xAxis, discreteAxisDataX);\n\n this.calculatedData = {\n onlyPositive,\n dotsByFacets,\n facetKeys,\n facetKeysCombinations,\n trendsData,\n legendLabels,\n layersData,\n discreteAxisDataX,\n discreteAxisDataY\n };\n }\n\n _updateAesInData() {\n const calculated = this.calculatedData;\n if (!calculated) {\n return;\n }\n const {grouping, trend, layers} = this.settings;\n const {facetKeys, trendsData} = calculated;\n\n facetKeys.forEach(facetKey => {\n for (let i = 0; i < layers.length; i++) {\n calculated.layersData[facetKey][i].info = layers[i];\n }\n });\n\n grouping.forEach(({columnName, inheritedAes}) => {\n const usedAes = new Set<keyof AesItem>();\n const usedAesFromPalettes: Partial<Record<keyof AesItem, string[]>> = {}; // if there is palette in mapping then\n layers.forEach(layer => {\n if (layer.aes) {\n Object.entries(layer.aes).forEach(([key, value]) => {\n if (isInheritMapping(value) && value.value === columnName.value) {\n usedAes.add(key as keyof AesItem);\n if (value.palette) {\n usedAesFromPalettes[key as keyof AesItem] = value.palette;\n }\n }\n });\n }\n });\n calculated.legendLabels[columnName.value].usedAes = [...usedAes];\n calculated.legendLabels[columnName.value].aesMap = addPalettesToAesMapping(\n columnName,\n usedAesFromPalettes,\n inheritedAes\n );\n });\n if (trendsData && trend) {\n Object.keys(trendsData).forEach((key) => {\n trendsData[key].forEach(trendInfo => {\n trendInfo.color = trend.color;\n trendInfo.bounded = trend.bounded;\n });\n });\n }\n }\n\n _updateChart() {\n if (!this.calculatedData) {\n return;\n }\n const {id, chartSettings, facetSettings, grouping, keyColumn, layers, trend} = this.settings;\n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n facetSettings,\n this.calculatedData.facetKeys,\n this.calculatedData.facetKeysCombinations, //for titles, if facet by more than 1 column\n this.calculatedData.dotsByFacets,\n this.calculatedData.trendsData,\n keyColumn,\n this.calculatedData.onlyPositive,\n this.calculatedData.legendLabels,\n this.calculatedData.layersData,\n grouping.map(v => v.columnName),\n layers,\n trend,\n this.calculatedData.discreteAxisDataX,\n this.calculatedData.discreteAxisDataY,\n this.onTooltipHintSwitch\n );\n }\n}\n"],"names":["isInheritMapping","value","getDiscreteAxisData","data","axis","column","keys","res","v","labelValue","ChartScatterplot","AbstractChart","settings","eventHandlers","__publicField","ChartRenderer","ScatterplotSettingsImpl","node","err","isErrorInfo","getUnknownErrorInfo","previousSettings","previousData","_field","_value","renderToString","prevSettings","el","idx","_a","arraysAreDifferent","_b","_c","_d","l","prevData","prevKeys","key","x","y","facetBy","grouping","trend","layers","label","highlight","chartSettings","facetKeysLists","categoryGroupingKeysLists","columnName","facetKeysCombinations","getKeysCombinations","categoryGroupingCombinations","facetGroupingValues","onlyPositive","groupingColumns","dotsByFacets","getDots","facetKeys","MAX_FACETS_COUNT","errorInfo","trendsData","getRegressionData","discreteAxisDataX","discreteAxisDataY","MAX_GROUPS_COUNT","legendLabels","createLegendInfo","layersData","getLayersData","calculated","facetKey","i","inheritedAes","usedAes","usedAesFromPalettes","layer","addPalettesToAesMapping","trendInfo","id","facetSettings","keyColumn"],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { DataFrame } from '../../DataFrame';
|
|
2
2
|
import { ColumnName, DataValue } from '../../types';
|
|
3
3
|
import { Dot } from '../dots';
|
|
4
|
+
import { DotsLayer } from '../ScatterplotSettingsImpl';
|
|
4
5
|
export declare function sortDotsByGrouping(dataFrame: DataFrame, dots: Dot[], grouping: {
|
|
5
6
|
columnName: ColumnName;
|
|
6
7
|
order?: DataValue[];
|
|
7
|
-
}[], highlight: ColumnName | null): void;
|
|
8
|
+
}[], highlight: ColumnName | null, layer?: DotsLayer): void;
|
|
@@ -1,18 +1,29 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
import { isContinuousAes as g } from "../../types/common.js";
|
|
2
|
+
import "../../types/discrete.js";
|
|
3
|
+
import "../../types/scatterplot.js";
|
|
4
|
+
import "../../types/heatmap.js";
|
|
5
|
+
import "../../types/dendro.js";
|
|
6
|
+
import "../../types/histogram.js";
|
|
7
|
+
import "../../types/bubble.js";
|
|
8
|
+
function N(m, p, c, V, r) {
|
|
9
|
+
const a = c.reduce((t, { columnName: e, order: o }) => (o && (t[e.value] = o.reduce((i, u, n) => (i[u] = o.length - n, i), {})), t), {});
|
|
10
|
+
p.sort((t, e) => {
|
|
11
|
+
var o, i;
|
|
12
|
+
if (V && e.dimmed !== t.dimmed)
|
|
13
|
+
return e.dimmed ? 1 : -1;
|
|
14
|
+
if (g(r == null ? void 0 : r.aes.dotFill)) {
|
|
15
|
+
const { range: u, columnName: n } = r.aes.dotFill, s = m.getColumnValue(n.value, t.idx), l = m.getColumnValue(n.value, e.idx);
|
|
16
|
+
return s === null || l === null ? 0 : s > l == u[0] > u[1] ? 1 : -1;
|
|
17
|
+
}
|
|
18
|
+
for (const { columnName: u } of c) {
|
|
19
|
+
const n = m.getColumnValue(u.value, t.idx), s = m.getColumnValue(u.value, e.idx), l = (o = a[u.value]) == null ? void 0 : o[n], f = (i = a[u.value]) == null ? void 0 : i[s];
|
|
20
|
+
if (l !== f)
|
|
21
|
+
return l - f;
|
|
11
22
|
}
|
|
12
23
|
return 0;
|
|
13
24
|
});
|
|
14
25
|
}
|
|
15
26
|
export {
|
|
16
|
-
|
|
27
|
+
N as sortDotsByGrouping
|
|
17
28
|
};
|
|
18
29
|
//# sourceMappingURL=sortDotsByGrouping.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sortDotsByGrouping.js","sources":["../../../src/scatterplot/utils/sortDotsByGrouping.ts"],"sourcesContent":["import type {DataFrame} from '../../DataFrame';\nimport type
|
|
1
|
+
{"version":3,"file":"sortDotsByGrouping.js","sources":["../../../src/scatterplot/utils/sortDotsByGrouping.ts"],"sourcesContent":["import type {DataFrame} from '../../DataFrame';\nimport {type ColumnName, type DataValue, isContinuousAes} from '../../types';\nimport type {Dot} from '../dots';\nimport type { DotsLayer } from '../ScatterplotSettingsImpl';\n\nexport function sortDotsByGrouping(\n dataFrame: DataFrame,\n dots:Dot[],\n grouping: {columnName: ColumnName; order?: DataValue[];}[],\n highlight: ColumnName | null,\n layer?: DotsLayer\n) {\n const weightsByColumnByOrder = grouping.reduce((res, {columnName, order}) => {\n if (order) {\n res[columnName.value] = order.reduce((weights, orderEl, idx) => {\n weights[orderEl as string] = order.length - idx;\n return weights;\n }, {} as Record<string, number>);\n }\n return res;\n }, {} as Record<string, Record<string, number>>);\n\n dots.sort((d1, d2) => {\n if (highlight && d2.dimmed !== d1.dimmed) {\n return d2.dimmed ? 1 : -1;\n }\n if (isContinuousAes(layer?.aes.dotFill)) {\n const {range, columnName} = layer.aes.dotFill;\n const aValue = dataFrame.getColumnValue(columnName.value, d1.idx);\n const bValue = dataFrame.getColumnValue(columnName.value, d2.idx);\n if (aValue === null || bValue === null) {\n return 0;\n }\n return aValue > bValue === range[0] > range[1] ? 1 : -1;\n }\n for (const {columnName} of grouping) {\n const aValue = dataFrame.getColumnValue(columnName.value, d1.idx);\n const bValue = dataFrame.getColumnValue(columnName.value, d2.idx);\n const aWeight = weightsByColumnByOrder[columnName.value]?.[aValue as string];\n const bWeight = weightsByColumnByOrder[columnName.value]?.[bValue as string];\n if (aWeight !== bWeight) {\n return aWeight - bWeight;\n }\n }\n return 0;\n });\n}"],"names":["sortDotsByGrouping","dataFrame","dots","grouping","highlight","layer","weightsByColumnByOrder","res","columnName","order","weights","orderEl","idx","d1","d2","isContinuousAes","range","aValue","bValue","aWeight","_a","bWeight","_b"],"mappings":";;;;;;;AAKO,SAASA,EACZC,GACAC,GACAC,GACAC,GACAC,GACF;AACE,QAAMC,IAAyBH,EAAS,OAAO,CAACI,GAAK,EAAC,YAAAC,GAAY,OAAAC,SAC1DA,MACAF,EAAIC,EAAW,KAAK,IAAIC,EAAM,OAAO,CAACC,GAASC,GAASC,OACpDF,EAAQC,CAAiB,IAAIF,EAAM,SAASG,GACrCF,IACR,CAAA,CAA4B,IAE5BH,IACR,CAAA,CAA4C;AAE/C,EAAAL,EAAK,KAAK,CAACW,GAAIC,MAAO;;AAClB,QAAIV,KAAaU,EAAG,WAAWD,EAAG;AAC9B,aAAOC,EAAG,SAAS,IAAI;AAE3B,QAAIC,EAAgBV,KAAA,gBAAAA,EAAO,IAAI,OAAO,GAAG;AACrC,YAAM,EAAC,OAAAW,GAAO,YAAAR,EAAA,IAAcH,EAAM,IAAI,SAChCY,IAAShB,EAAU,eAAeO,EAAW,OAAOK,EAAG,GAAG,GAC1DK,IAASjB,EAAU,eAAeO,EAAW,OAAOM,EAAG,GAAG;AAChE,aAAIG,MAAW,QAAQC,MAAW,OACvB,IAEJD,IAASC,KAAWF,EAAM,CAAC,IAAIA,EAAM,CAAC,IAAI,IAAI;AAAA,IACzD;AACA,eAAW,EAAC,YAAAR,EAAA,KAAeL,GAAU;AACjC,YAAMc,IAAShB,EAAU,eAAeO,EAAW,OAAOK,EAAG,GAAG,GAC1DK,IAASjB,EAAU,eAAeO,EAAW,OAAOM,EAAG,GAAG,GAC1DK,KAAUC,IAAAd,EAAuBE,EAAW,KAAK,MAAvC,gBAAAY,EAA2CH,IACrDI,KAAUC,IAAAhB,EAAuBE,EAAW,KAAK,MAAvC,gBAAAc,EAA2CJ;AAC3D,UAAIC,MAAYE;AACZ,eAAOF,IAAUE;AAAA,IAEzB;AACA,WAAO;AAAA,EACX,CAAC;AACL;"}
|
|
@@ -53,14 +53,15 @@ declare class ChartRenderer {
|
|
|
53
53
|
createMainTitle(title: ScatterplotUmapSettingsImpl['chartSettings']['title']): void;
|
|
54
54
|
updateMargins(xAxis: ScatterplotUmapSettingsImpl['chartSettings']['xAxis'], yAxis: ScatterplotUmapSettingsImpl['chartSettings']['yAxis']): void;
|
|
55
55
|
updateLegendSize(legend: ScatterplotUmapSettingsImpl['chartSettings']['legend'], legendLabels: ScatterplotUmapLegendInfo, grouping: ColumnName[], layers: ScatterplotUmapLayer[]): void;
|
|
56
|
-
initSettings(dots: Dot[], chartSettings: ScatterplotUmapSettingsImpl['chartSettings'], dotExtents: DotsExtents, legendInfo: ScatterplotUmapLegendInfo, layers: ScatterplotUmapSettingsImpl['layers'], grouping: ColumnName[]): void;
|
|
56
|
+
initSettings(dots: Dot[], chartSettings: ScatterplotUmapSettingsImpl['chartSettings'], dotExtents: DotsExtents, legendInfo: ScatterplotUmapLegendInfo, layers: ScatterplotUmapSettingsImpl['layers'], grouping: ColumnName[], onZoomChange: (v: boolean) => void): void;
|
|
57
|
+
resetZoom(xAxis: ScatterplotUmapSettingsImpl['chartSettings']['xAxis'], yAxis: ScatterplotUmapSettingsImpl['chartSettings']['yAxis'], dotsExtents?: DotsExtents): void;
|
|
57
58
|
updateAes(legendInfo: ScatterplotUmapLegendInfo, layers: ScatterplotUmapSettingsImpl['layers']): void;
|
|
58
|
-
updatePointSize(): void;
|
|
59
|
+
updatePointSize(legendInfo: ScatterplotUmapLegendInfo, layers: ScatterplotUmapSettingsImpl['layers']): void;
|
|
59
60
|
updateByLasso(): void;
|
|
60
61
|
createQuadtree(dots: Dot[]): KDBush;
|
|
61
62
|
getClosestDot(_x: number, _y: number): Dot | null;
|
|
62
63
|
updateDots(dots: Dot[]): void;
|
|
63
|
-
render(dataFrame: DataFrame, settingsId: string, chartSettings: ScatterplotUmapSettingsImpl['chartSettings'], keyColumn: ColumnName | null, dots: Dot[], dotExtents: DotsExtents, dotsByGrouping: Record<string, Dot[]>, layers: ScatterplotUmapSettingsImpl['layers'], legendInfo: ScatterplotUmapLegendInfo, grouping: ColumnName[], onPolygonUpdateOutside: ScatterplotEventHandlers['onPolygonUpdate'], onTooltipHintSwitch: (v: boolean) => void, onLassoControlsStateUpdate: (v: LassoControlsState) => void): void;
|
|
64
|
+
render(dataFrame: DataFrame, settingsId: string, chartSettings: ScatterplotUmapSettingsImpl['chartSettings'], keyColumn: ColumnName | null, dots: Dot[], dotExtents: DotsExtents, dotsByGrouping: Record<string, Dot[]>, layers: ScatterplotUmapSettingsImpl['layers'], legendInfo: ScatterplotUmapLegendInfo, grouping: ColumnName[], onPolygonUpdateOutside: ScatterplotEventHandlers['onPolygonUpdate'], onTooltipHintSwitch: (v: boolean) => void, onLassoControlsStateUpdate: (v: LassoControlsState) => void, onZoomChange: (v: boolean) => void): void;
|
|
64
65
|
renderWebglLayer(): void;
|
|
65
66
|
onPolygonUpdate: (p: Polygon[]) => void;
|
|
66
67
|
renderSvgLayer(): void;
|