From e03e51d3161f312b886ba895bfb71371c67220f9 Mon Sep 17 00:00:00 2001 From: MiniPear Date: Thu, 27 Jul 2023 17:46:30 +0800 Subject: [PATCH] fix(line-xy): support bandOffset --- .../static/settleWeatherCellLineXY.png | Bin 0 -> 26525 bytes __tests__/plots/static/index.ts | 1 + .../static/seattle-weather-cell-lineXY.ts | 34 ++++++++++++++++++ .../static/vaccines-cell-scale-relation.ts | 2 ++ src/mark/lineX.ts | 16 ++++++--- src/mark/lineY.ts | 16 ++++++--- 6 files changed, 59 insertions(+), 10 deletions(-) create mode 100644 __tests__/integration/snapshots/static/settleWeatherCellLineXY.png create mode 100644 __tests__/plots/static/seattle-weather-cell-lineXY.ts diff --git a/__tests__/integration/snapshots/static/settleWeatherCellLineXY.png b/__tests__/integration/snapshots/static/settleWeatherCellLineXY.png new file mode 100644 index 0000000000000000000000000000000000000000..21dffa86816bf314b37b64fba1e8b28588fbb81c GIT binary patch literal 26525 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
    -iwZKOp`V)5~|kd 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 literal 0 HcmV?d00001 diff --git a/__tests__/plots/static/index.ts b/__tests__/plots/static/index.ts index e649b8b175..2147b44188 100644 --- a/__tests__/plots/static/index.ts +++ b/__tests__/plots/static/index.ts @@ -275,3 +275,4 @@ export { cars2PointOrdinalSize } from './cars2-point-ordinal-size'; export { cars2PointConstantColorSize } from './cars2-point-constant-color-size'; export { alphabetIntervalTitleAuto } from './alphabet-interval-title-auto'; export { alphabetIntervalAutoPaddingLabelHide } from './alphabet-interval-auto-padding-label-hide'; +export { settleWeatherCellLineXY } from './seattle-weather-cell-lineXY'; diff --git a/__tests__/plots/static/seattle-weather-cell-lineXY.ts b/__tests__/plots/static/seattle-weather-cell-lineXY.ts new file mode 100644 index 0000000000..36314b0d7c --- /dev/null +++ b/__tests__/plots/static/seattle-weather-cell-lineXY.ts @@ -0,0 +1,34 @@ +import { G2Spec } from '../../../src'; + +export function settleWeatherCellLineXY(): G2Spec { + return { + type: 'view', + height: 325, + children: [ + { + type: 'cell', + data: { + type: 'fetch', + value: 'data/seattle-weather.csv', + }, + encode: { + x: (d) => new Date(d.date).getUTCDate(), + y: (d) => new Date(d.date).getUTCMonth(), + color: 'temp_max', + }, + transform: [{ type: 'group', color: 'max' }], + style: { inset: 0.5 }, + }, + { + type: 'lineY', + data: [4], + style: { stroke: 'red', strokeWidth: 4, bandOffset: 0.5 }, + }, + { + type: 'lineX', + data: [4], + style: { stroke: 'red', strokeWidth: 4, bandOffset: 0.5 }, + }, + ], + }; +} diff --git a/__tests__/plots/static/vaccines-cell-scale-relation.ts b/__tests__/plots/static/vaccines-cell-scale-relation.ts index c8cee51eba..92a9bf63b5 100644 --- a/__tests__/plots/static/vaccines-cell-scale-relation.ts +++ b/__tests__/plots/static/vaccines-cell-scale-relation.ts @@ -67,3 +67,5 @@ export function vaccinesCellScaleRelation(): G2Spec { ], }; } + +vaccinesCellScaleRelation.only = true; diff --git a/src/mark/lineX.ts b/src/mark/lineX.ts index f2fafb4e87..03fd7f7819 100644 --- a/src/mark/lineX.ts +++ b/src/mark/lineX.ts @@ -1,21 +1,27 @@ -import { Vector } from '@antv/coord'; +import { deepMix } from '@antv/util'; import { MarkComponent as MC, Vector2 } from '../runtime'; import { LineXMark } from '../spec'; import { basePostInference, baseAnnotationChannels, basePreInference, + createBandOffset, } from './utils'; export type LineXOptions = Omit; -export const LineX: MC = () => { +export const LineX: MC = (options) => { return (index, scale, value, coordinate) => { const { x: X } = value; + const offset = createBandOffset( + scale, + value, + deepMix({ style: { bandOffset: 0 } }, options), + ); const P = Array.from(index, (i) => { - const p1 = [X[i], 1] as Vector; - const p2 = [X[i], 0] as Vector; - return [p1, p2].map((d) => coordinate.map(d)) as Vector2[]; + const p1 = [X[i], 1] as Vector2; + const p2 = [X[i], 0] as Vector2; + return [p1, p2].map((d) => coordinate.map(offset(d, i))) as Vector2[]; }); return [index, P]; }; diff --git a/src/mark/lineY.ts b/src/mark/lineY.ts index 06f6dda8a7..2378ebb65c 100644 --- a/src/mark/lineY.ts +++ b/src/mark/lineY.ts @@ -1,21 +1,27 @@ -import { Vector } from '@antv/coord'; +import { deepMix } from '@antv/util'; import { MarkComponent as MC, Vector2 } from '../runtime'; import { LineYMark } from '../spec'; import { baseAnnotationChannels, basePreInference, basePostInference, + createBandOffset, } from './utils'; export type LineYOptions = Omit; -export const LineY: MC = () => { +export const LineY: MC = (options) => { return (index, scale, value, coordinate) => { const { y: Y } = value; + const offset = createBandOffset( + scale, + value, + deepMix({ style: { bandOffset: 0 } }, options), + ); const P = Array.from(index, (i) => { - const p1 = [0, Y[i]] as Vector; - const p2 = [1, Y[i]] as Vector; - return [p1, p2].map((d) => coordinate.map(d)) as Vector2[]; + const p1 = [0, Y[i]] as Vector2; + const p2 = [1, Y[i]] as Vector2; + return [p1, p2].map((d) => coordinate.map(offset(d, i))) as Vector2[]; }); return [index, P]; };