You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by ov...@apache.org on 2018/08/27 05:33:52 UTC
[incubator-echarts] branch master updated: fix(polar): fix polar
axis category interval #8791
This is an automated email from the ASF dual-hosted git repository.
ovilia pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-echarts.git
The following commit(s) were added to refs/heads/master by this push:
new ebadaf7 fix(polar): fix polar axis category interval #8791
ebadaf7 is described below
commit ebadaf70cc5b53e9041cda60508e6567dcc1c608
Author: Ovilia <zw...@gmail.com>
AuthorDate: Mon Aug 27 13:33:19 2018 +0800
fix(polar): fix polar axis category interval #8791
---
src/coord/axisTickLabelBuilder.js | 1 -
src/coord/polar/AngleAxis.js | 71 ++++++++++++++++++++++++++++++++++++++-
2 files changed, 70 insertions(+), 2 deletions(-)
diff --git a/src/coord/axisTickLabelBuilder.js b/src/coord/axisTickLabelBuilder.js
index e1a849c..822cd9d 100644
--- a/src/coord/axisTickLabelBuilder.js
+++ b/src/coord/axisTickLabelBuilder.js
@@ -217,7 +217,6 @@ export function calculateCategoryInterval(axis) {
var width = 0;
var height = 0;
- // Polar is also calculated in assumptive linear layout here.
// Not precise, do not consider align and vertical align
// and each distance from axis line yet.
var rect = textContain.getBoundingRect(
diff --git a/src/coord/polar/AngleAxis.js b/src/coord/polar/AngleAxis.js
index 175efc2..1dae806 100644
--- a/src/coord/polar/AngleAxis.js
+++ b/src/coord/polar/AngleAxis.js
@@ -18,7 +18,11 @@
*/
import * as zrUtil from 'zrender/src/core/util';
+import * as textContain from 'zrender/src/contain/text';
import Axis from '../Axis';
+import {makeInner} from '../../util/model';
+
+var inner = makeInner();
function AngleAxis(scale, angleExtent) {
@@ -50,7 +54,72 @@ AngleAxis.prototype = {
dataToAngle: Axis.prototype.dataToCoord,
- angleToData: Axis.prototype.coordToData
+ angleToData: Axis.prototype.coordToData,
+
+ /**
+ * Only be called in category axis.
+ * Angle axis uses text height to decide interval
+ *
+ * @override
+ * @return {number} Auto interval for cateogry axis tick and label
+ */
+ calculateCategoryInterval: function () {
+ var axis = this;
+ var labelModel = axis.getLabelModel();
+
+ var ordinalScale = axis.scale;
+ var ordinalExtent = ordinalScale.getExtent();
+ // Providing this method is for optimization:
+ // avoid generating a long array by `getTicks`
+ // in large category data case.
+ var tickCount = ordinalScale.count();
+
+ if (ordinalExtent[1] - ordinalExtent[0] < 1) {
+ return 0;
+ }
+
+ var tickValue = ordinalExtent[0];
+ var unitSpan = axis.dataToCoord(tickValue + 1) - axis.dataToCoord(tickValue);
+ var unitH = Math.abs(unitSpan);
+
+ // Not precise, just use height as text width
+ // and each distance from axis line yet.
+ var rect = textContain.getBoundingRect(
+ tickValue, labelModel.getFont(), 'center', 'top'
+ );
+ var maxH = Math.max(rect.height, 7);
+
+ var dh = maxH / unitH;
+ // 0/0 is NaN, 1/0 is Infinity.
+ isNaN(dh) && (dh = Infinity);
+ var interval = Math.max(0, Math.floor(dh));
+
+ var cache = inner(axis.model);
+ var lastAutoInterval = cache.lastAutoInterval;
+ var lastTickCount = cache.lastTickCount;
+
+ // Use cache to keep interval stable while moving zoom window,
+ // otherwise the calculated interval might jitter when the zoom
+ // window size is close to the interval-changing size.
+ if (lastAutoInterval != null
+ && lastTickCount != null
+ && Math.abs(lastAutoInterval - interval) <= 1
+ && Math.abs(lastTickCount - tickCount) <= 1
+ // Always choose the bigger one, otherwise the critical
+ // point is not the same when zooming in or zooming out.
+ && lastAutoInterval > interval
+ ) {
+ interval = lastAutoInterval;
+ }
+ // Only update cache if cache not used, otherwise the
+ // changing of interval is too insensitive.
+ else {
+ cache.lastTickCount = tickCount;
+ cache.lastAutoInterval = interval;
+ }
+
+ return interval;
+ }
};
zrUtil.inherits(AngleAxis, Axis);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org