From 94aa06d4ab6d1368f00c34842ebf0f056f711aff Mon Sep 17 00:00:00 2001 From: Purbayan Pramanik Date: Mon, 20 Oct 2025 19:51:12 +0530 Subject: [PATCH 1/4] fix: horizontal candlesticks with encode. close #21322 --- src/chart/candlestick/CandlestickView.ts | 10 ++ src/chart/candlestick/candlestickLayout.ts | 5 +- src/chart/candlestick/candlestickVisual.ts | 6 +- src/chart/helper/whiskerBoxCommon.ts | 35 ++++- test/candlestick-horizontal.html | 153 +++++++++++++++++++++ 5 files changed, 202 insertions(+), 7 deletions(-) create mode 100644 test/candlestick-horizontal.html diff --git a/src/chart/candlestick/CandlestickView.ts b/src/chart/candlestick/CandlestickView.ts index 728291424c..22c3d43f90 100644 --- a/src/chart/candlestick/CandlestickView.ts +++ b/src/chart/candlestick/CandlestickView.ts @@ -110,6 +110,9 @@ class CandlestickView extends ChartView { .add(function (newIdx) { if (data.hasValue(newIdx)) { const itemLayout = data.getItemLayout(newIdx) as CandlestickItemLayout; + if (!itemLayout) { + return; + } if (needsClip && isNormalBoxClipped(clipArea, itemLayout)) { return; @@ -135,6 +138,10 @@ class CandlestickView extends ChartView { } const itemLayout = data.getItemLayout(newIdx) as CandlestickItemLayout; + if (!itemLayout) { + group.remove(el); + return; + } if (needsClip && isNormalBoxClipped(clipArea, itemLayout)) { group.remove(el); return; @@ -191,6 +198,9 @@ class CandlestickView extends ChartView { let dataIndex; while ((dataIndex = params.next()) != null) { const itemLayout = data.getItemLayout(dataIndex) as CandlestickItemLayout; + if (!itemLayout) { + continue; + } const el = createNormalBox(itemLayout, dataIndex); setBoxCommon(el, data, dataIndex, isSimpleBox); diff --git a/src/chart/candlestick/candlestickLayout.ts b/src/chart/candlestick/candlestickLayout.ts index f655b381f0..77e5c65d88 100644 --- a/src/chart/candlestick/candlestickLayout.ts +++ b/src/chart/candlestick/candlestickLayout.ts @@ -51,8 +51,9 @@ const candlestickLayout: StageHandler = { const coordSys = seriesModel.coordinateSystem; const data = seriesModel.getData(); const candleWidth = calculateCandleWidth(seriesModel, data); - const cDimIdx = 0; - const vDimIdx = 1; + const layout = seriesModel.get('layout'); + const cDimIdx = layout === 'horizontal' ? 0 : 1; + const vDimIdx = 1 - cDimIdx; const coordDims = ['x', 'y']; const cDimI = data.getDimensionIndex(data.mapDimension(coordDims[cDimIdx])); const vDimsI = map(data.mapDimensionsAll(coordDims[vDimIdx]), data.getDimensionIndex, data); diff --git a/src/chart/candlestick/candlestickVisual.ts b/src/chart/candlestick/candlestickVisual.ts index a665ea3b69..a1bcd2d793 100644 --- a/src/chart/candlestick/candlestickVisual.ts +++ b/src/chart/candlestick/candlestickVisual.ts @@ -65,7 +65,11 @@ const candlestickVisual: StageHandler = { let dataIndex; while ((dataIndex = params.next()) != null) { const itemModel = data.getItemModel(dataIndex); - const sign = data.getItemLayout(dataIndex).sign; + const itemLayout = data.getItemLayout(dataIndex); + if (!itemLayout) { + continue; + } + const sign = itemLayout.sign; const style = itemModel.getItemStyle(); style.fill = getColor(sign, itemModel); diff --git a/src/chart/helper/whiskerBoxCommon.ts b/src/chart/helper/whiskerBoxCommon.ts index efd425afa4..fe4ffdcbe0 100644 --- a/src/chart/helper/whiskerBoxCommon.ts +++ b/src/chart/helper/whiskerBoxCommon.ts @@ -76,10 +76,37 @@ class WhiskerBoxCommonMixin { const yAxisType = yAxisModel.get('type'); let addOrdinal; - // FIXME - // Consider time axis. + const encodeRules = this.getEncode(); + const hasXEncode = encodeRules && encodeRules.get('x') != null; + const hasYEncode = encodeRules && encodeRules.get('y') != null; + + if (hasXEncode && hasYEncode) { + const xEncode = encodeRules.get('x'); + const yEncode = encodeRules.get('y'); + const xIsArray = zrUtil.isArray(xEncode) && xEncode.length > 1; + const yIsArray = zrUtil.isArray(yEncode) && yEncode.length > 1; - if (xAxisType === 'category') { + if (yIsArray && !xIsArray) { + option.layout = 'horizontal'; + } + else if (xIsArray && !yIsArray) { + option.layout = 'vertical'; + } + else if (xAxisType === 'category') { + option.layout = 'horizontal'; + ordinalMeta = xAxisModel.getOrdinalMeta(); + addOrdinal = !this._hasEncodeRule('x'); + } + else if (yAxisType === 'category') { + option.layout = 'vertical'; + ordinalMeta = yAxisModel.getOrdinalMeta(); + addOrdinal = !this._hasEncodeRule('y'); + } + else { + option.layout = option.layout || 'horizontal'; + } + } + else if (xAxisType === 'category') { option.layout = 'horizontal'; ordinalMeta = xAxisModel.getOrdinalMeta(); addOrdinal = !this._hasEncodeRule('x'); @@ -169,4 +196,4 @@ class WhiskerBoxCommonMixin { }; -export {WhiskerBoxCommonMixin}; +export { WhiskerBoxCommonMixin }; diff --git a/test/candlestick-horizontal.html b/test/candlestick-horizontal.html new file mode 100644 index 0000000000..f3aeb924ef --- /dev/null +++ b/test/candlestick-horizontal.html @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + +
+
+ + + + + + From bb875b5f2a7e9b977c03722080b741610407fc2b Mon Sep 17 00:00:00 2001 From: Purbayan Pramanik Date: Fri, 24 Oct 2025 00:30:34 +0530 Subject: [PATCH 2/4] fix: resolve not-null checks and improved layout selection logic --- src/chart/candlestick/CandlestickView.ts | 10 ----- src/chart/helper/whiskerBoxCommon.ts | 54 +++++++----------------- 2 files changed, 15 insertions(+), 49 deletions(-) diff --git a/src/chart/candlestick/CandlestickView.ts b/src/chart/candlestick/CandlestickView.ts index 22c3d43f90..728291424c 100644 --- a/src/chart/candlestick/CandlestickView.ts +++ b/src/chart/candlestick/CandlestickView.ts @@ -110,9 +110,6 @@ class CandlestickView extends ChartView { .add(function (newIdx) { if (data.hasValue(newIdx)) { const itemLayout = data.getItemLayout(newIdx) as CandlestickItemLayout; - if (!itemLayout) { - return; - } if (needsClip && isNormalBoxClipped(clipArea, itemLayout)) { return; @@ -138,10 +135,6 @@ class CandlestickView extends ChartView { } const itemLayout = data.getItemLayout(newIdx) as CandlestickItemLayout; - if (!itemLayout) { - group.remove(el); - return; - } if (needsClip && isNormalBoxClipped(clipArea, itemLayout)) { group.remove(el); return; @@ -198,9 +191,6 @@ class CandlestickView extends ChartView { let dataIndex; while ((dataIndex = params.next()) != null) { const itemLayout = data.getItemLayout(dataIndex) as CandlestickItemLayout; - if (!itemLayout) { - continue; - } const el = createNormalBox(itemLayout, dataIndex); setBoxCommon(el, data, dataIndex, isSimpleBox); diff --git a/src/chart/helper/whiskerBoxCommon.ts b/src/chart/helper/whiskerBoxCommon.ts index fe4ffdcbe0..a1235e076f 100644 --- a/src/chart/helper/whiskerBoxCommon.ts +++ b/src/chart/helper/whiskerBoxCommon.ts @@ -17,17 +17,17 @@ * under the License. */ -import createSeriesDataSimply from './createSeriesDataSimply'; import * as zrUtil from 'zrender/src/core/util'; -import {getDimensionTypeByAxis} from '../../data/helper/dimensionHelper'; -import {makeSeriesEncodeForAxisCoordSys} from '../../data/helper/sourceHelper'; -import type { SeriesOption, SeriesOnCartesianOptionMixin, LayoutOrient } from '../../util/types'; -import type GlobalModel from '../../model/Global'; -import type SeriesModel from '../../model/Series'; -import type CartesianAxisModel from '../../coord/cartesian/AxisModel'; -import type SeriesData from '../../data/SeriesData'; import type Axis2D from '../../coord/cartesian/Axis2D'; +import type CartesianAxisModel from '../../coord/cartesian/AxisModel'; import { CoordDimensionDefinition } from '../../data/helper/createDimensions'; +import { getDimensionTypeByAxis } from '../../data/helper/dimensionHelper'; +import { makeSeriesEncodeForAxisCoordSys } from '../../data/helper/sourceHelper'; +import type SeriesData from '../../data/SeriesData'; +import type GlobalModel from '../../model/Global'; +import type SeriesModel from '../../model/Series'; +import type { LayoutOrient, SeriesOnCartesianOptionMixin, SeriesOption } from '../../util/types'; +import createSeriesDataSimply from './createSeriesDataSimply'; interface CommonOption extends SeriesOption, SeriesOnCartesianOptionMixin { layout?: LayoutOrient @@ -76,37 +76,7 @@ class WhiskerBoxCommonMixin { const yAxisType = yAxisModel.get('type'); let addOrdinal; - const encodeRules = this.getEncode(); - const hasXEncode = encodeRules && encodeRules.get('x') != null; - const hasYEncode = encodeRules && encodeRules.get('y') != null; - - if (hasXEncode && hasYEncode) { - const xEncode = encodeRules.get('x'); - const yEncode = encodeRules.get('y'); - const xIsArray = zrUtil.isArray(xEncode) && xEncode.length > 1; - const yIsArray = zrUtil.isArray(yEncode) && yEncode.length > 1; - - if (yIsArray && !xIsArray) { - option.layout = 'horizontal'; - } - else if (xIsArray && !yIsArray) { - option.layout = 'vertical'; - } - else if (xAxisType === 'category') { - option.layout = 'horizontal'; - ordinalMeta = xAxisModel.getOrdinalMeta(); - addOrdinal = !this._hasEncodeRule('x'); - } - else if (yAxisType === 'category') { - option.layout = 'vertical'; - ordinalMeta = yAxisModel.getOrdinalMeta(); - addOrdinal = !this._hasEncodeRule('y'); - } - else { - option.layout = option.layout || 'horizontal'; - } - } - else if (xAxisType === 'category') { + if (xAxisType === 'category') { option.layout = 'horizontal'; ordinalMeta = xAxisModel.getOrdinalMeta(); addOrdinal = !this._hasEncodeRule('x'); @@ -116,6 +86,12 @@ class WhiskerBoxCommonMixin { ordinalMeta = yAxisModel.getOrdinalMeta(); addOrdinal = !this._hasEncodeRule('y'); } + else if (xAxisType === 'time') { + option.layout = 'horizontal'; + } + else if (yAxisType === 'time') { + option.layout = 'vertical'; + } else { option.layout = option.layout || 'horizontal'; } From 8eb93d090a05377e37c1978b78df7579f7a37175 Mon Sep 17 00:00:00 2001 From: Purbayan Pramanik Date: Fri, 24 Oct 2025 12:33:43 +0530 Subject: [PATCH 3/4] fix: added more test cases and resolved unnescessary changes --- src/chart/candlestick/candlestickVisual.ts | 6 +- src/chart/helper/whiskerBoxCommon.ts | 16 +- test/candlestick-horizontal.html | 273 ++++++++++++++------- 3 files changed, 187 insertions(+), 108 deletions(-) diff --git a/src/chart/candlestick/candlestickVisual.ts b/src/chart/candlestick/candlestickVisual.ts index a1bcd2d793..a665ea3b69 100644 --- a/src/chart/candlestick/candlestickVisual.ts +++ b/src/chart/candlestick/candlestickVisual.ts @@ -65,11 +65,7 @@ const candlestickVisual: StageHandler = { let dataIndex; while ((dataIndex = params.next()) != null) { const itemModel = data.getItemModel(dataIndex); - const itemLayout = data.getItemLayout(dataIndex); - if (!itemLayout) { - continue; - } - const sign = itemLayout.sign; + const sign = data.getItemLayout(dataIndex).sign; const style = itemModel.getItemStyle(); style.fill = getColor(sign, itemModel); diff --git a/src/chart/helper/whiskerBoxCommon.ts b/src/chart/helper/whiskerBoxCommon.ts index a1235e076f..891a0dd698 100644 --- a/src/chart/helper/whiskerBoxCommon.ts +++ b/src/chart/helper/whiskerBoxCommon.ts @@ -17,17 +17,17 @@ * under the License. */ +import createSeriesDataSimply from './createSeriesDataSimply'; import * as zrUtil from 'zrender/src/core/util'; -import type Axis2D from '../../coord/cartesian/Axis2D'; -import type CartesianAxisModel from '../../coord/cartesian/AxisModel'; -import { CoordDimensionDefinition } from '../../data/helper/createDimensions'; -import { getDimensionTypeByAxis } from '../../data/helper/dimensionHelper'; -import { makeSeriesEncodeForAxisCoordSys } from '../../data/helper/sourceHelper'; -import type SeriesData from '../../data/SeriesData'; +import {getDimensionTypeByAxis} from '../../data/helper/dimensionHelper'; +import {makeSeriesEncodeForAxisCoordSys} from '../../data/helper/sourceHelper'; +import type { SeriesOption, SeriesOnCartesianOptionMixin, LayoutOrient } from '../../util/types'; import type GlobalModel from '../../model/Global'; import type SeriesModel from '../../model/Series'; -import type { LayoutOrient, SeriesOnCartesianOptionMixin, SeriesOption } from '../../util/types'; -import createSeriesDataSimply from './createSeriesDataSimply'; +import type CartesianAxisModel from '../../coord/cartesian/AxisModel'; +import type SeriesData from '../../data/SeriesData'; +import type Axis2D from '../../coord/cartesian/Axis2D'; +import { CoordDimensionDefinition } from '../../data/helper/createDimensions'; interface CommonOption extends SeriesOption, SeriesOnCartesianOptionMixin { layout?: LayoutOrient diff --git a/test/candlestick-horizontal.html b/test/candlestick-horizontal.html index f3aeb924ef..49bf05f880 100644 --- a/test/candlestick-horizontal.html +++ b/test/candlestick-horizontal.html @@ -34,118 +34,201 @@
+
+
+
+
+
+
+
+ // yAxis is category + { + id: "main3", + title: "yAxis is category (candlestick, daval)", + option: createChartOption( + "candlestick", + null, + "category", + { x: [1, 3, 2, 4], y: 0 }, + daval + ), + }, - From f94f2214f637fe5a680519c0ee2f606424d27432 Mon Sep 17 00:00:00 2001 From: 100pah Date: Thu, 30 Oct 2025 15:41:22 +0800 Subject: [PATCH 4/4] fix: (1) priority of defaults by layout and axis types. (2) init animation. --- src/chart/boxplot/BoxplotView.ts | 2 +- src/chart/boxplot/boxplotLayout.ts | 2 +- src/chart/candlestick/CandlestickSeries.ts | 4 ++ src/chart/candlestick/CandlestickView.ts | 27 +++++++++---- src/chart/candlestick/candlestickLayout.ts | 3 +- src/chart/helper/whiskerBoxCommon.ts | 45 ++++++++++++++-------- test/candlestick-horizontal.html | 23 ++++++++++- 7 files changed, 78 insertions(+), 28 deletions(-) diff --git a/src/chart/boxplot/BoxplotView.ts b/src/chart/boxplot/BoxplotView.ts index f48cdf67b0..0d88309773 100644 --- a/src/chart/boxplot/BoxplotView.ts +++ b/src/chart/boxplot/BoxplotView.ts @@ -46,7 +46,7 @@ class BoxplotView extends ChartView { group.removeAll(); } - const constDim = seriesModel.get('layout') === 'horizontal' ? 1 : 0; + const constDim = seriesModel.getWhiskerBoxesLayout() === 'horizontal' ? 1 : 0; data.diff(oldData) .add(function (newIdx) { diff --git a/src/chart/boxplot/boxplotLayout.ts b/src/chart/boxplot/boxplotLayout.ts index cf6017b3cb..053462d2f2 100644 --- a/src/chart/boxplot/boxplotLayout.ts +++ b/src/chart/boxplot/boxplotLayout.ts @@ -144,7 +144,7 @@ function layoutSingleSeries(seriesModel: BoxplotSeriesModel, offset: number, box const coordSys = seriesModel.coordinateSystem; const data = seriesModel.getData(); const halfWidth = boxWidth / 2; - const cDimIdx = seriesModel.get('layout') === 'horizontal' ? 0 : 1; + const cDimIdx = seriesModel.getWhiskerBoxesLayout() === 'horizontal' ? 0 : 1; const vDimIdx = 1 - cDimIdx; const coordDims = ['x', 'y']; const cDim = data.mapDimension(coordDims[cDimIdx]); diff --git a/src/chart/candlestick/CandlestickSeries.ts b/src/chart/candlestick/CandlestickSeries.ts index f152fce2cf..55938e3b48 100644 --- a/src/chart/candlestick/CandlestickSeries.ts +++ b/src/chart/candlestick/CandlestickSeries.ts @@ -37,6 +37,7 @@ import SeriesData from '../../data/SeriesData'; import Cartesian2D from '../../coord/cartesian/Cartesian2D'; import { BrushCommonSelectorsForSeries } from '../../component/brush/selector'; import { mixin } from 'zrender/src/core/util'; +import type Axis2D from '../../coord/cartesian/Axis2D'; type CandlestickDataValue = OptionDataValue[]; @@ -158,6 +159,9 @@ class CandlestickSeriesModel extends SeriesModel { } } +interface CandlestickSeriesModel extends WhiskerBoxCommonMixin { + getBaseAxis(): Axis2D +} mixin(CandlestickSeriesModel, WhiskerBoxCommonMixin, true); export default CandlestickSeriesModel; diff --git a/src/chart/candlestick/CandlestickView.ts b/src/chart/candlestick/CandlestickView.ts index 728291424c..706cae6fcc 100644 --- a/src/chart/candlestick/CandlestickView.ts +++ b/src/chart/candlestick/CandlestickView.ts @@ -106,6 +106,8 @@ class CandlestickView extends ChartView { group.removeAll(); } + const transPointDim = getTransPointDimension(seriesModel); + data.diff(oldData) .add(function (newIdx) { if (data.hasValue(newIdx)) { @@ -115,7 +117,7 @@ class CandlestickView extends ChartView { return; } - const el = createNormalBox(itemLayout, newIdx, true); + const el = createNormalBox(itemLayout, newIdx, transPointDim, true); graphic.initProps(el, {shape: {points: itemLayout.ends}}, seriesModel, newIdx); setBoxCommon(el, data, newIdx, isSimpleBox); @@ -141,7 +143,7 @@ class CandlestickView extends ChartView { } if (!el) { - el = createNormalBox(itemLayout, newIdx); + el = createNormalBox(itemLayout, newIdx, transPointDim); } else { graphic.updateProps(el, { @@ -188,10 +190,12 @@ class CandlestickView extends ChartView { const data = seriesModel.getData(); const isSimpleBox = data.getLayout('isSimpleBox'); + const transPointDim = getTransPointDimension(seriesModel); + let dataIndex; while ((dataIndex = params.next()) != null) { const itemLayout = data.getItemLayout(dataIndex) as CandlestickItemLayout; - const el = createNormalBox(itemLayout, dataIndex); + const el = createNormalBox(itemLayout, dataIndex, transPointDim); setBoxCommon(el, data, dataIndex, isSimpleBox); el.incremental = true; @@ -262,12 +266,17 @@ class NormalBoxPath extends Path { } -function createNormalBox(itemLayout: CandlestickItemLayout, dataIndex: number, isInit?: boolean) { +function createNormalBox( + itemLayout: CandlestickItemLayout, + dataIndex: number, + constDim: number, + isInit?: boolean +) { const ends = itemLayout.ends; return new NormalBoxPath({ shape: { points: isInit - ? transInit(ends, itemLayout) + ? transInit(ends, constDim, itemLayout) : ends }, z2: 100 @@ -310,14 +319,18 @@ function setBoxCommon(el: NormalBoxPath, data: SeriesData, dataIndex: number, is toggleHoverEmphasis(el, emphasisModel.get('focus'), emphasisModel.get('blurScope'), emphasisModel.get('disabled')); } -function transInit(points: number[][], itemLayout: CandlestickItemLayout) { +function transInit(points: number[][], dim: number, itemLayout: CandlestickItemLayout) { return zrUtil.map(points, function (point) { point = point.slice(); - point[1] = itemLayout.initBaseline; + point[dim] = itemLayout.initBaseline; return point; }); } +function getTransPointDimension(seriesModel: CandlestickSeriesModel): number { + return seriesModel.getWhiskerBoxesLayout() === 'horizontal' ? 1 : 0; +} + class LargeBoxPathShape { diff --git a/src/chart/candlestick/candlestickLayout.ts b/src/chart/candlestick/candlestickLayout.ts index 77e5c65d88..6b6fa03a6e 100644 --- a/src/chart/candlestick/candlestickLayout.ts +++ b/src/chart/candlestick/candlestickLayout.ts @@ -51,8 +51,7 @@ const candlestickLayout: StageHandler = { const coordSys = seriesModel.coordinateSystem; const data = seriesModel.getData(); const candleWidth = calculateCandleWidth(seriesModel, data); - const layout = seriesModel.get('layout'); - const cDimIdx = layout === 'horizontal' ? 0 : 1; + const cDimIdx = seriesModel.getWhiskerBoxesLayout() === 'horizontal' ? 0 : 1; const vDimIdx = 1 - cDimIdx; const coordDims = ['x', 'y']; const cDimI = data.getDimensionIndex(data.mapDimension(coordDims[cDimIdx])); diff --git a/src/chart/helper/whiskerBoxCommon.ts b/src/chart/helper/whiskerBoxCommon.ts index 891a0dd698..294fd0eae2 100644 --- a/src/chart/helper/whiskerBoxCommon.ts +++ b/src/chart/helper/whiskerBoxCommon.ts @@ -30,6 +30,9 @@ import type Axis2D from '../../coord/cartesian/Axis2D'; import { CoordDimensionDefinition } from '../../data/helper/createDimensions'; interface CommonOption extends SeriesOption, SeriesOnCartesianOptionMixin { + // - 'horizontal': Multiple whisker boxes (each drawn vertically) + // are arranged side by side horizontally. + // - 'vertical': The opposite. layout?: LayoutOrient // data?: (DataItemOption | number[])[] @@ -44,14 +47,15 @@ interface DataItemOption { interface WhiskerBoxCommonMixin extends SeriesModel{} class WhiskerBoxCommonMixin { - /** - * @private - * @type {string} - */ - _baseAxisDim: string; + private _baseAxisDim: string; defaultValueDimensions: CoordDimensionDefinition['dimsDef']; + /** + * Computed layout. + */ + private _layout: CommonOption['layout']; + /** * @private */ @@ -76,28 +80,33 @@ class WhiskerBoxCommonMixin { const yAxisType = yAxisModel.get('type'); let addOrdinal; + // Theoretically, if `encode` and/or `layout` are not specified, they can be derived from + // the specified one (also according to axis types). However, only the logic for deriving + // `encode` from `layout` is implemented; the reverse direction is not implemented yet, + // due to its complexity and low priority. + let layout = option.layout; + // 'category' axis has historically been enforcing `layout` regardless of its presence. + // This behavior is preserved until it causes problems. if (xAxisType === 'category') { - option.layout = 'horizontal'; + layout = 'horizontal'; ordinalMeta = xAxisModel.getOrdinalMeta(); addOrdinal = !this._hasEncodeRule('x'); } else if (yAxisType === 'category') { - option.layout = 'vertical'; + layout = 'vertical'; ordinalMeta = yAxisModel.getOrdinalMeta(); addOrdinal = !this._hasEncodeRule('y'); } - else if (xAxisType === 'time') { - option.layout = 'horizontal'; - } - else if (yAxisType === 'time') { - option.layout = 'vertical'; - } - else { - option.layout = option.layout || 'horizontal'; + if (!layout) { + layout = yAxisType === 'time' ? 'vertical' : 'horizontal'; + // It is theoretically possible for an axis with type "time" to serve as the "value axis". + // `layout` can be explicitly specified for that case. } + // Do not assign the computed `layout` to `option.layout`, otherwise the idempotent may be broken. + this._layout = layout; const coordDims = ['x', 'y']; - const baseAxisDimIndex = option.layout === 'horizontal' ? 0 : 1; + const baseAxisDimIndex = layout === 'horizontal' ? 0 : 1; const baseAxisDim = this._baseAxisDim = coordDims[baseAxisDimIndex]; const otherAxisDim = coordDims[1 - baseAxisDimIndex]; const axisModels = [xAxisModel, yAxisModel]; @@ -169,6 +178,10 @@ class WhiskerBoxCommonMixin { ) as CartesianAxisModel).axis; } + getWhiskerBoxesLayout() { + return this._layout; + } + }; diff --git a/test/candlestick-horizontal.html b/test/candlestick-horizontal.html index 49bf05f880..bc5fb0db42 100644 --- a/test/candlestick-horizontal.html +++ b/test/candlestick-horizontal.html @@ -41,6 +41,7 @@
+