diff --git a/src/coord/Axis.ts b/src/coord/Axis.ts index 6226e96b26..e54086ddd4 100644 --- a/src/coord/Axis.ts +++ b/src/coord/Axis.ts @@ -295,6 +295,9 @@ class Axis { } function fixExtentWithBands(extent: [number, number], nTick: number): void { + if (nTick <= 1) { + return; + } const size = extent[1] - extent[0]; const len = nTick; const margin = size / len / 2; diff --git a/src/scale/breakImpl.ts b/src/scale/breakImpl.ts index 67d2eaa657..b3fcadaadd 100644 --- a/src/scale/breakImpl.ts +++ b/src/scale/breakImpl.ts @@ -99,7 +99,14 @@ class ScaleBreakContextImpl implements ScaleBreakContext { const elapsedSpan = this._elapsedExtent[1] - this._elapsedExtent[0]; // The same logic as `Scale#normalize`. if (elapsedSpan === 0) { - return 0.5; + const elapsedVal = this.elapse(val); + if (isNaN(elapsedVal)) { + return NaN; + } + if (elapsedVal === this._elapsedExtent[0]) { + return 0.5; + } + return elapsedVal < this._elapsedExtent[0] ? -0.5 : 1.5; } return (this.elapse(val) - this._elapsedExtent[0]) / elapsedSpan; } diff --git a/src/scale/helper.ts b/src/scale/helper.ts index 31f41945ec..3ef8424bfa 100644 --- a/src/scale/helper.ts +++ b/src/scale/helper.ts @@ -151,7 +151,13 @@ function normalize( // Dont use optional arguments for performance consideration here. ): number { if (extent[1] === extent[0]) { - return 0.5; + if (isNaN(val)) { + return NaN; + } + if (val === extent[0]) { + return 0.5; + } + return val < extent[0] ? -0.5 : 1.5; } return (val - extent[0]) / (extent[1] - extent[0]); } diff --git a/test/dataZoom-filterMode-scale.html b/test/dataZoom-filterMode-scale.html new file mode 100644 index 0000000000..e520bdceef --- /dev/null +++ b/test/dataZoom-filterMode-scale.html @@ -0,0 +1,102 @@ + + + + + DataZoom FilterMode Scale Test + + + + + + +
+
+
+
+
+
+ + + +