From c6cf2bc531ab392badaf3f230622a8071c3dea02 Mon Sep 17 00:00:00 2001 From: jinzisen Date: Mon, 20 Jan 2025 18:15:33 +0800 Subject: [PATCH 1/2] feat(visualMap): able to set the 'dimension' to an array --- src/component/visualMap/ContinuousModel.ts | 2 +- src/component/visualMap/ContinuousView.ts | 3 ++- src/component/visualMap/PiecewiseModel.ts | 12 +++++++----- src/component/visualMap/VisualMapModel.ts | 13 +++++++++++-- src/component/visualMap/visualEncoding.ts | 4 ++-- 5 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/component/visualMap/ContinuousModel.ts b/src/component/visualMap/ContinuousModel.ts index d8281bcec8..7b73ba02f0 100644 --- a/src/component/visualMap/ContinuousModel.ts +++ b/src/component/visualMap/ContinuousModel.ts @@ -203,7 +203,7 @@ class ContinuousModel extends VisualMapModel { const dataIndices: number[] = []; const data = seriesModel.getData(); - data.each(this.getDataDimensionIndex(data), function (value, dataIndex) { + data.each(this.getDataDimensionIndex(data, seriesModel.seriesIndex), function (value, dataIndex) { range[0] <= value && value <= range[1] && dataIndices.push(dataIndex); }, this); diff --git a/src/component/visualMap/ContinuousView.ts b/src/component/visualMap/ContinuousView.ts index 17b244be08..501f56f7fe 100644 --- a/src/component/visualMap/ContinuousView.ts +++ b/src/component/visualMap/ContinuousView.ts @@ -853,7 +853,8 @@ class ContinuousView extends VisualMapView { } const data = dataModel.getData(ecData.dataType); - const value = data.getStore().get(visualMapModel.getDataDimensionIndex(data), ecData.dataIndex) as number; + const value = data.getStore() + .get(visualMapModel.getDataDimensionIndex(data, dataModel.seriesIndex), ecData.dataIndex) as number; if (!isNaN(value)) { this._showIndicator(value, value); diff --git a/src/component/visualMap/PiecewiseModel.ts b/src/component/visualMap/PiecewiseModel.ts index ef5913a62a..b16792d9bf 100644 --- a/src/component/visualMap/PiecewiseModel.ts +++ b/src/component/visualMap/PiecewiseModel.ts @@ -313,11 +313,13 @@ class PiecewiseModel extends VisualMapModel { const dataIndices: number[] = []; const data = seriesModel.getData(); - data.each(this.getDataDimensionIndex(data), function (value: number, dataIndex: number) { - // Should always base on model pieceList, because it is order sensitive. - const pIdx = VisualMapping.findPieceIndex(value, pieceList); - pIdx === pieceIndex && dataIndices.push(dataIndex); - }, this); + data.each( + this.getDataDimensionIndex(data, seriesModel.seriesIndex), + function (value: number, dataIndex: number) { + // Should always base on model pieceList, because it is order sensitive. + const pIdx = VisualMapping.findPieceIndex(value, pieceList); + pIdx === pieceIndex && dataIndices.push(dataIndex); + }, this); result.push({seriesId: seriesModel.id, dataIndex: dataIndices}); }, this); diff --git a/src/component/visualMap/VisualMapModel.ts b/src/component/visualMap/VisualMapModel.ts index 85b3162e51..dad317773c 100644 --- a/src/component/visualMap/VisualMapModel.ts +++ b/src/component/visualMap/VisualMapModel.ts @@ -84,7 +84,7 @@ export interface VisualMapOption /** * Dimension to be encoded */ - dimension?: number + dimension?: number | number[] /** * Visual configuration for the data in selection @@ -392,8 +392,17 @@ class VisualMapModel extends Com // } // } - getDataDimensionIndex(data: SeriesData): DimensionIndex { + getDimension(seriesIndex: number): number { const optDim = this.option.dimension; + if (isArray(optDim) && seriesIndex != null) { + const idx = this.getTargetSeriesIndices().indexOf(seriesIndex); + return optDim[idx] ?? optDim[optDim.length - 1]; + } + return [].concat(optDim)[0]; + } + + getDataDimensionIndex(data: SeriesData, seriesIndex: number): DimensionIndex { + const optDim = this.getDimension(seriesIndex); if (optDim != null) { return data.getDimensionIndex(optDim); diff --git a/src/component/visualMap/visualEncoding.ts b/src/component/visualMap/visualEncoding.ts index 6f090b3694..4a6e4dcbde 100644 --- a/src/component/visualMap/visualEncoding.ts +++ b/src/component/visualMap/visualEncoding.ts @@ -42,7 +42,7 @@ export const visualMapEncodingHandlers: StageHandler[] = [ visualMapModel.stateList, visualMapModel.targetVisuals, zrUtil.bind(visualMapModel.getValueState, visualMapModel), - visualMapModel.getDataDimensionIndex(seriesModel.getData()) + visualMapModel.getDataDimensionIndex(seriesModel.getData(), seriesModel.seriesIndex) )); }); @@ -65,7 +65,7 @@ export const visualMapEncodingHandlers: StageHandler[] = [ outerColors: [] } as VisualMeta; - const dimIdx = visualMapModel.getDataDimensionIndex(data); + const dimIdx = visualMapModel.getDataDimensionIndex(data, seriesModel.seriesIndex); if (dimIdx >= 0) { // visualMeta.dimension should be dimension index, but not concrete dimension. visualMeta.dimension = dimIdx; From 57df96704dea59e4def3947799e3e7436ad6ce41 Mon Sep 17 00:00:00 2001 From: jinzisen Date: Mon, 20 Jan 2025 18:19:48 +0800 Subject: [PATCH 2/2] test(visualMap): able to set the 'dimension' to an array --- test/runTest/actions/__meta__.json | 1 + test/runTest/actions/visualmap-dimension.json | 1 + test/visualmap-dimension.html | 159 ++++++++++++++++++ 3 files changed, 161 insertions(+) create mode 100644 test/runTest/actions/visualmap-dimension.json create mode 100644 test/visualmap-dimension.html diff --git a/test/runTest/actions/__meta__.json b/test/runTest/actions/__meta__.json index 3a9a4d28cd..1d8200bd08 100644 --- a/test/runTest/actions/__meta__.json +++ b/test/runTest/actions/__meta__.json @@ -220,6 +220,7 @@ "universalTransition2": 3, "universalTransition3": 2, "visualMap-categories": 1, + "visualmap-dimension": 3, "visualMap-multi-continuous": 1, "visualMap-selectMode": 2 } \ No newline at end of file diff --git a/test/runTest/actions/visualmap-dimension.json b/test/runTest/actions/visualmap-dimension.json new file mode 100644 index 0000000000..76f661676b --- /dev/null +++ b/test/runTest/actions/visualmap-dimension.json @@ -0,0 +1 @@ +[{"name":"Action 1","ops":[{"type":"screenshot","time":1195}],"scrollY":0,"scrollX":0,"timestamp":1737368248568},{"name":"Action 2","ops":[{"type":"screenshot","time":532}],"scrollY":678,"scrollX":0,"timestamp":1737368258531},{"name":"Action 3","ops":[{"type":"screenshot","time":357}],"scrollY":1334,"scrollX":0,"timestamp":1737368264539}] \ No newline at end of file diff --git a/test/visualmap-dimension.html b/test/visualmap-dimension.html new file mode 100644 index 0000000000..6ecbf77840 --- /dev/null +++ b/test/visualmap-dimension.html @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + +