You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by su...@apache.org on 2026/03/15 20:09:49 UTC
(echarts) 20/32: fix: Fix inappropriate impl introduced by the previous commits.
This is an automated email from the ASF dual-hosted git repository.
sushuang pushed a commit to branch PR/plainheart_fix/alignTicks-precision
in repository https://gitbox.apache.org/repos/asf/echarts.git
commit 7a8d38bae90dce8af628bab58f6c186125876e89
Author: 100pah <su...@gmail.com>
AuthorDate: Fri Feb 27 22:31:35 2026 +0800
fix: Fix inappropriate impl introduced by the previous commits.
---
src/chart/custom/CustomView.ts | 4 ++--
src/component/axis/AxisBuilder.ts | 4 ++--
src/component/toolbox/feature/DataView.ts | 2 +-
src/coord/Axis.ts | 2 +-
src/coord/axisBand.ts | 20 +++++++++++++-------
src/coord/axisHelper.ts | 3 +--
src/layout/barGrid.ts | 18 ++++++++++++++----
src/model/Series.ts | 1 -
8 files changed, 34 insertions(+), 20 deletions(-)
diff --git a/src/chart/custom/CustomView.ts b/src/chart/custom/CustomView.ts
index 066d24b9e..fe50f12ce 100644
--- a/src/chart/custom/CustomView.ts
+++ b/src/chart/custom/CustomView.ts
@@ -27,7 +27,7 @@ import * as labelStyleHelper from '../../label/labelStyle';
import {getDefaultLabel} from '../helper/labelHelper';
import {
BarGridLayoutOptionForCustomSeries, BarGridLayoutResultForCustomSeries,
- getLayoutOnAxis
+ computeBarLayoutForCustomSeries
} from '../../layout/barGrid';
import DataDiffer from '../../data/DataDiffer';
import Model from '../../model/Model';
@@ -924,7 +924,7 @@ function makeRenderItem(
): BarGridLayoutResultForCustomSeries {
if (coordSys.type === 'cartesian2d') {
const baseAxis = coordSys.getBaseAxis() as Axis2D;
- return getLayoutOnAxis(defaults({axis: baseAxis}, opt));
+ return computeBarLayoutForCustomSeries(defaults({axis: baseAxis}, opt));
}
}
diff --git a/src/component/axis/AxisBuilder.ts b/src/component/axis/AxisBuilder.ts
index 78fc96ea6..40783f067 100644
--- a/src/component/axis/AxisBuilder.ts
+++ b/src/component/axis/AxisBuilder.ts
@@ -1148,7 +1148,7 @@ function syncLabelIgnoreToMajorTicks(
tickEls: graphic.Line[],
) {
if (cfg.showMinorTicks) {
- // It probably unreaasonable to hide major ticks when show minor ticks.
+ // It probably unreasonable to hide major ticks when show minor ticks.
return;
}
each(labelLayoutList, labelLayout => {
@@ -1481,8 +1481,8 @@ function buildAxisLabel(
eventData.value = rawLabel;
eventData.tickIndex = index;
const labelItemTickBreak = labelItem.tick.break;
- const labelItemTickBreakParsedBreak = labelItemTickBreak.parsedBreak;
if (labelItemTickBreak) {
+ const labelItemTickBreakParsedBreak = labelItemTickBreak.parsedBreak;
eventData.break = {
// type: labelItem.break.type,
start: labelItemTickBreakParsedBreak.vmin,
diff --git a/src/component/toolbox/feature/DataView.ts b/src/component/toolbox/feature/DataView.ts
index 391699197..def839af5 100644
--- a/src/component/toolbox/feature/DataView.ts
+++ b/src/component/toolbox/feature/DataView.ts
@@ -75,7 +75,7 @@ function groupSeries(ecModel: GlobalModel) {
const coordSys = seriesModel.coordinateSystem;
if (coordSys && (coordSys.type === 'cartesian2d' || coordSys.type === 'polar')) {
- // TODO: TYPE Consider polar? Include polar may increase unecessary bundle size.
+ // TODO: TYPE Consider polar? Include polar may increase unnecessary bundle size.
const baseAxis = (coordSys as Cartesian2D).getBaseAxis();
if (baseAxis.type === 'category') {
const key = getCartesianAxisHashKey(baseAxis);
diff --git a/src/coord/Axis.ts b/src/coord/Axis.ts
index b0370028f..ce36ee005 100644
--- a/src/coord/Axis.ts
+++ b/src/coord/Axis.ts
@@ -245,7 +245,7 @@ class Axis {
* NOTICE: Can only be called after `adoptBandWidth` being called in `CoordinateSystem#update` stage.
*/
getBandWidth(): number {
- calcBandWidth(tmpOutBandWidth, this);
+ calcBandWidth(tmpOutBandWidth, this, true);
// NOTICE: Do not add logic here. Implement everthing in `calcBandWidth`.
return tmpOutBandWidth.bandWidth;
}
diff --git a/src/coord/axisBand.ts b/src/coord/axisBand.ts
index 95edb208f..b90abc2ed 100644
--- a/src/coord/axisBand.ts
+++ b/src/coord/axisBand.ts
@@ -31,7 +31,8 @@ import { getScaleLinearSpanForMapping } from '../scale/scaleMapper';
const SINGULAR_BAND_WIDTH_RATIO = 0.7;
export type AxisBandWidthResult = {
- // In px. May be NaN/null/undefined if no meaningfull bandWidth.
+ // In px. After the calling of `calcBandWidth`, it may be NaN if no meaningfull bandWidth,
+ // but never be null/undefined any more.
bandWidth?: number | NullUndefined;
kind?: AxisBandWidthKind;
// If `AXIS_BAND_WIDTH_KIND_NORMAL`, this is a ratio from px span to data span, exists only if not singular.
@@ -66,15 +67,22 @@ export const AXIS_BAND_WIDTH_KIND_NORMAL = 2;
*/
export function calcBandWidth(
out: AxisBandWidthResult,
- axis: Axis
+ axis: Axis,
+ useFallback: boolean
): void {
// Clear out.
- out.bandWidth = out.ratio = out.kind = undefined;
+ out.ratio = out.kind = undefined;
+ out.bandWidth = NaN;
const scale = axis.scale;
if (isOrdinalScale(scale)
- || !calcBandWidthForNumericAxisIfPossible(out, axis, scale)
+ || (
+ !calcBandWidthForNumericAxisIfPossible(out, axis, scale)
+ // The fallback is only reasonable in several special cases (e.g., axis number is interger).
+ // So it is used only for backward compatibility.
+ && useFallback
+ )
) {
calcBandWidthForCategoryAxisOrFallback(out, axis, scale);
}
@@ -98,9 +106,7 @@ function calcBandWidthForCategoryAxisOrFallback(
// Fix #2728, avoid NaN when only one data.
len === 0 && (len = 1);
- const size = Math.abs(axisExtent[1] - axisExtent[0]);
-
- out.bandWidth = Math.abs(size) / len;
+ out.bandWidth = mathAbs(axisExtent[1] - axisExtent[0]) / len;
}
function calcBandWidthForNumericAxisIfPossible(
diff --git a/src/coord/axisHelper.ts b/src/coord/axisHelper.ts
index 8739c5ebf..455338964 100644
--- a/src/coord/axisHelper.ts
+++ b/src/coord/axisHelper.ts
@@ -38,7 +38,6 @@ import {
AxisLabelFormatterExtraParams,
OptionAxisType,
AXIS_TYPES,
- AxisShowMinMaxLabelOption,
} from './axisCommonTypes';
import SeriesData from '../data/SeriesData';
import { getStackedDimension } from '../data/helper/dataStackHelper';
@@ -52,8 +51,8 @@ import {
} from '../scale/helper';
import { AxisModelExtendedInCreator } from './axisModelCreator';
import { initExtentForUnion, makeInner } from '../util/model';
-import { ComponentModel } from '../echarts.simple';
import { SCALE_EXTENT_KIND_EFFECTIVE, SCALE_MAPPER_DEPTH_OUT_OF_BREAK } from '../scale/scaleMapper';
+import ComponentModel from '../model/Component';
const axisInner = makeInner<{
diff --git a/src/layout/barGrid.ts b/src/layout/barGrid.ts
index 6d1616fc1..9cd2c44b3 100644
--- a/src/layout/barGrid.ts
+++ b/src/layout/barGrid.ts
@@ -111,12 +111,22 @@ type BarGridLayoutResultItem = BarGridLayoutResultItemInternal & {
export type BarGridLayoutResultForCustomSeries = BarGridLayoutResultItem[] | NullUndefined;
/**
- * @return If axis.type is not 'category', return undefined.
+ * Return null/undefined if not 'category' axis.
+ *
+ * PENDING: The layout on non-'category' axis relies on `bandWidth`, which is calculated
+ * based on the `linearPositiveMinGap` of series data. This strategy is somewhat heuristic
+ * and will not be public to custom series until required in future. Additionally, more ec
+ * options may be introduced for that, because it requires `requireAxisStatistics` to be
+ * called on custom series that requires this feature.
*/
-export function getLayoutOnAxis(opt: BarGridLayoutOption): BarGridLayoutResultForCustomSeries {
+export function computeBarLayoutForCustomSeries(opt: BarGridLayoutOption): BarGridLayoutResultForCustomSeries {
+ if (!isOrdinalScale(opt.axis.scale)) {
+ return;
+ }
+
const params: BarGridLayoutAxisSeriesInfo[] = [];
const bandWidthResult: AxisBandWidthResult = {};
- calcBandWidth(bandWidthResult, opt.axis);
+ calcBandWidth(bandWidthResult, opt.axis, false);
for (let i = 0; i < opt.count || 0; i++) {
params.push(defaults({
@@ -162,7 +172,7 @@ function createLayoutInfoListOnAxis(
const seriesInfoOnAxis: BarGridLayoutAxisSeriesInfo[] = [];
const bandWidthResult: AxisBandWidthResult = {};
- calcBandWidth(bandWidthResult, baseAxis);
+ calcBandWidth(bandWidthResult, baseAxis, false);
const bandWidth = bandWidthResult.bandWidth;
eachCollectedSeries(baseAxis, axisStatKey(seriesType), function (seriesModel: BaseBarSeriesModel) {
diff --git a/src/model/Series.ts b/src/model/Series.ts
index f4fe5fb8d..5446cdccd 100644
--- a/src/model/Series.ts
+++ b/src/model/Series.ts
@@ -434,7 +434,6 @@ class SeriesModel<Opt extends SeriesOption = SeriesOption> extends ComponentMode
*/
getBaseAxis(): Axis {
const coordSys = this.coordinateSystem;
- // @ts-ignore
return coordSys && coordSys.getBaseAxis && coordSys.getBaseAxis();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org