diff --git a/src/chart/bar/BarView.js b/src/chart/bar/BarView.js index 18c5e2ac70..80e72a06e6 100644 --- a/src/chart/bar/BarView.js +++ b/src/chart/bar/BarView.js @@ -336,8 +336,31 @@ var clip = { return clipped; }, - polar: function (coordSysClipArea) { - return false; + polar: function (coordSysClipArea, layout) { + var signR = layout.r0 <= layout.r ? 1 : -1; + // Make sure r is larger than r0 + if (signR < 0) { + var r = layout.r; + layout.r = layout.r0; + layout.r0 = r; + } + + var r = mathMin(layout.r, coordSysClipArea.r); + var r0 = mathMax(layout.r0, coordSysClipArea.r0); + + layout.r = r; + layout.r0 = r0; + + var clipped = r - r0 < 0; + + // Reverse back + if (signR < 0) { + var r = layout.r; + layout.r = layout.r0; + layout.r0 = r; + } + + return clipped; } }; diff --git a/src/layout/barPolar.js b/src/layout/barPolar.js index 2aebd930b0..50fea41747 100644 --- a/src/layout/barPolar.js +++ b/src/layout/barPolar.js @@ -82,8 +82,9 @@ function barLayoutPolar(seriesType, ecModel, api) { var clampLayout = baseAxis.dim !== 'radius' || !seriesModel.get('roundCap', true); - var valueAxisStart = valueAxis.getExtent()[0]; - + var valueAxisStart = valueAxis.dim === 'radius' + ? valueAxis.dataToRadius(0) + : valueAxis.dataToAngle(0); for (var idx = 0, len = data.count(); idx < len; idx++) { var value = data.get(valueDim, idx); var baseValue = data.get(baseDim, idx); @@ -95,6 +96,7 @@ function barLayoutPolar(seriesType, ecModel, api) { // stackResultDimension directly. // Only ordinal axis can be stacked. if (stacked) { + if (!lastStackCoords[stackId][baseValue]) { lastStackCoords[stackId][baseValue] = { p: valueAxisStart, // Positive stack diff --git a/test/bar-polar-stack.html b/test/bar-polar-stack.html index 2b114da9cb..498412084a 100644 --- a/test/bar-polar-stack.html +++ b/test/bar-polar-stack.html @@ -32,11 +32,24 @@ height: 100%; margin: 0; } + html, body, .test-chart { + width: 100%; + height: 100%; + margin: 0; + } #main { background: #fff; }
+

polar negative

+
+

polar min negative

+
+

polar max negative

+
+

polar radius min > 0

+
+ + + + +