UNPKG

@antv/g2

Version:

the Grammar of Graphics in Javascript

51 lines 1.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Jitter = exports.interpolate = exports.rangeOf = void 0; const scale_1 = require("@antv/scale"); const util_1 = require("@antv/util"); const helper_1 = require("./utils/helper"); const order_1 = require("./utils/order"); function rangeOf(value, scaleOptions, padding) { if (value === null) return [-0.5, 0.5]; const domain = (0, order_1.domainOf)(value, scaleOptions); const scale = new scale_1.Band({ domain, range: [0, 1], padding }); const step = scale.getBandWidth(); return [-step / 2, step / 2]; } exports.rangeOf = rangeOf; function interpolate(t, a, b) { return a * (1 - t) + b * t; } exports.interpolate = interpolate; /** * The jitter transform produce dx and dy channels for marks (especially for point) * with ordinal x and y dimension, say to make them jitter in their own space. */ const Jitter = (options = {}) => { const { padding = 0, paddingX = padding, paddingY = padding, random = Math.random, } = options; return (I, mark) => { const { encode, scale } = mark; const { x: scaleX, y: scaleY } = scale; const [X] = (0, helper_1.columnOf)(encode, 'x'); const [Y] = (0, helper_1.columnOf)(encode, 'y'); const rangeX = rangeOf(X, scaleX, paddingX); const rangeY = rangeOf(Y, scaleY, paddingY); const DY = I.map(() => interpolate(random(), ...rangeY)); const DX = I.map(() => interpolate(random(), ...rangeX)); return [ I, (0, util_1.deepMix)({ scale: { x: { padding: 0.5 }, y: { padding: 0.5 }, }, }, mark, { encode: { dy: (0, helper_1.column)(DY), dx: (0, helper_1.column)(DX) }, }), ]; }; }; exports.Jitter = Jitter; exports.Jitter.props = {}; //# sourceMappingURL=jitter.js.map