diff --git a/src/component/axis/AxisBuilder.js b/src/component/axis/AxisBuilder.js index 1f0ff7ec85c4aa0c3aeb76313f77a941740b5885..919fb5e5db176850a4fab911ffb095c74dfffa69 100644 --- a/src/component/axis/AxisBuilder.js +++ b/src/component/axis/AxisBuilder.js @@ -25,6 +25,7 @@ import {isRadianAroundZero, remRadian} from '../../util/number'; import {createSymbol} from '../../util/symbol'; import * as matrixUtil from 'zrender/src/core/matrix'; import {applyTransform as v2ApplyTransform} from 'zrender/src/core/vector'; +import {shouldShowAllLabels} from '../../coord/axisHelper'; var PI = Math.PI; @@ -479,6 +480,10 @@ function isSilent(axisModel) { } function fixMinMaxLabelShow(axisModel, labelEls, tickEls) { + if (shouldShowAllLabels(axisModel.axis)) { + return; + } + // If min or max are user set, we need to check // If the tick on min(max) are overlap on their neighbour tick // If they are overlapped, we need to hide the min(max) tick label diff --git a/src/coord/axisHelper.js b/src/coord/axisHelper.js index 34762bf0059ca598c2211a42b34afe7074548617..a0e2a136081b57dcc97721203bd99512ad8fbaf8 100644 --- a/src/coord/axisHelper.js +++ b/src/coord/axisHelper.js @@ -387,4 +387,23 @@ function rotateTextRect(textRect, rotate) { return rotatedRect; } +/** + * @param {module:echarts/src/model/Model} model axisLabelModel or axisTickModel + * @return {number|String} Can be null|'auto'|number|function + */ +export function getOptionCategoryInterval(model) { + var interval = model.get('interval'); + return interval == null ? 'auto' : interval; +} + +/** + * Set `categoryInterval` as 0 implicitly indicates that + * show all labels reguardless of overlap. + * @param {Object} axis axisModel.axis + * @return {boolean} + */ +export function shouldShowAllLabels(axis) { + return axis.type === 'category' + && getOptionCategoryInterval(axis.getLabelModel()) === 0; +} diff --git a/src/coord/axisTickLabelBuilder.js b/src/coord/axisTickLabelBuilder.js index 822cd9db92bc8e08b33e0dc77f01379ba8bd5ad7..2809d10f910e872e803be566f8c976c8af226ae2 100644 --- a/src/coord/axisTickLabelBuilder.js +++ b/src/coord/axisTickLabelBuilder.js @@ -20,7 +20,11 @@ import * as zrUtil from 'zrender/src/core/util'; import * as textContain from 'zrender/src/contain/text'; import {makeInner} from '../util/model'; -import {makeLabelFormatter} from './axisHelper'; +import { + makeLabelFormatter, + getOptionCategoryInterval, + shouldShowAllLabels +} from './axisHelper'; var inner = makeInner(); @@ -304,12 +308,11 @@ function makeLabelsByNumericCategoryInterval(axis, categoryInterval, onlyTick) { // suitable for splitLine and splitArea rendering. // (2) Scales except category always contain min max label so // do not need to perform this process. - var showMinMax = { - min: labelModel.get('showMinLabel'), - max: labelModel.get('showMaxLabel') - }; + var showAllLabel = shouldShowAllLabels(axis); + var includeMinLabel = labelModel.get('showMinLabel') || showAllLabel; + var includeMaxLabel = labelModel.get('showMaxLabel') || showAllLabel; - if (showMinMax.min && startTick !== ordinalExtent[0]) { + if (includeMinLabel && startTick !== ordinalExtent[0]) { addItem(ordinalExtent[0]); } @@ -319,7 +322,7 @@ function makeLabelsByNumericCategoryInterval(axis, categoryInterval, onlyTick) { addItem(tickValue); } - if (showMinMax.max && tickValue !== ordinalExtent[1]) { + if (includeMaxLabel && tickValue !== ordinalExtent[1]) { addItem(ordinalExtent[1]); } @@ -360,9 +363,3 @@ function makeLabelsByCustomizedCategoryInterval(axis, categoryInterval, onlyTick return result; } - -// Can be null|'auto'|number|function -function getOptionCategoryInterval(model) { - var interval = model.get('interval'); - return interval == null ? 'auto' : interval; -} diff --git a/test/axis-lastLabel.html b/test/axis-lastLabel.html index aa51add9ed4ff8d83e224777054f9a6e6c261ea9..5d7d1bd5f32d43e2601cead60a72e2b5cd9a4b55 100644 --- a/test/axis-lastLabel.html +++ b/test/axis-lastLabel.html @@ -47,6 +47,7 @@ under the License.
+ @@ -357,5 +358,107 @@ under the License. + + + + + + + + + + + +