1 |
- {"version":3,"sources":["index.js","factory.js","adjusts/adjust.js","constant.js","interface.js","adjusts/dodge.js","adjusts/jitter.js","adjusts/stack.js","adjusts/symmetric.js"],"names":[],"mappings":";;;;;;;AAAA;AACA;AACA;ACFA,ADGA;ACFA,ADGA;ACFA,ADGA;AELA,ADGA,ADGA;AELA,ADGA,ADGA;AELA,ADGA,ADGA;AELA,ACHA,AFMA,ADGA;AELA,ACHA,AFMA,ADGA;AELA,ACHA,AFMA,ADGA;AELA,ACHA,AFMA,ADGA,AIZA;AFOA,ACHA,AFMA,ADGA,AIZA;AFOA,ACHA,AFMA,ADGA,AIZA;AFOA,AGTA,AFMA,AFMA,ADGA;AELA,AGTA,AFMA,AFMA,ADGA;AELA,AGTA,AFMA,AFMA,ADGA;AELA,AGTA,ACHA,AHSA,AFMA,ADGA;AELA,AGTA,ACHA,ALeA,ADGA;AELA,AGTA,ACHA,ALeA;ACFA,AGTA,ACHA,ACHA,ANkBA;ACFA,AGTA,ACHA,ACHA,ANkBA;ACFA,AGTA,ACHA,ACHA,ANkBA;ACFA,AGTA,ACHA,ACHA,ACHA,APqBA;ACFA,AGTA,ACHA,ACHA,ACHA,APqBA;ACFA,AGTA,ACHA,ACHA,ACHA,APqBA;ACFA,AGTA,ACHA,ACHA,ACHA,APqBA;ACFA,AGTA,ACHA,ACHA,ACHA,APqBA;ACFA,AGTA,ACHA,ACHA,ACHA,APqBA;ACFA,AGTA,ACHA,ACHA,ACHA,APqBA;ACFA,AGTA,ACHA,ACHA,ACHA,APqBA;ACFA,AGTA,ACHA,ACHA,ACHA,APqBA;ACFA,AGTA,ACHA,ACHA,ACHA,APqBA;ACFA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,ACHA,ACHA,ACHA;ANmBA,AGTA,AENA,ACHA;ANmBA,AGTA,AENA,ACHA;ANmBA,AGTA,AENA,ACHA;ANmBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA,AENA;ALgBA,AGTA;AHUA,AGTA;AHUA,AGTA;AHUA,AGTA;AHUA,AGTA;AHUA,AGTA;AHUA,AGTA;AHUA,AGTA;AHUA,AGTA;AHUA,AGTA;AHUA,AGTA;AHUA,AGTA;AHUA,AGTA;AHUA,AGTA;AHUA,AGTA;AHUA,AGTA;AHUA,AGTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"index.js","sourcesContent":["\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Adjust = exports.registerAdjust = exports.getAdjust = void 0;\nvar tslib_1 = require(\"tslib\");\nvar factory_1 = require(\"./factory\");\nObject.defineProperty(exports, \"getAdjust\", { enumerable: true, get: function () { return factory_1.getAdjust; } });\nObject.defineProperty(exports, \"registerAdjust\", { enumerable: true, get: function () { return factory_1.registerAdjust; } });\nvar adjust_1 = require(\"./adjusts/adjust\");\nexports.Adjust = adjust_1.default;\nvar dodge_1 = require(\"./adjusts/dodge\");\nvar jitter_1 = require(\"./adjusts/jitter\");\nvar stack_1 = require(\"./adjusts/stack\");\nvar symmetric_1 = require(\"./adjusts/symmetric\");\n// 注册内置的 adjust\nfactory_1.registerAdjust('Dodge', dodge_1.default);\nfactory_1.registerAdjust('Jitter', jitter_1.default);\nfactory_1.registerAdjust('Stack', stack_1.default);\nfactory_1.registerAdjust('Symmetric', symmetric_1.default);\ntslib_1.__exportStar(require(\"./interface\"), exports);\n//# sourceMappingURL=index.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Adjust = exports.registerAdjust = exports.getAdjust = void 0;\nvar tslib_1 = require(\"tslib\");\nvar adjust_1 = require(\"./adjusts/adjust\");\nexports.Adjust = adjust_1.default;\nvar ADJUST_MAP = {};\n/**\n * 根据类型获取 Adjust 类\n * @param type\n */\nvar getAdjust = function (type) {\n return ADJUST_MAP[type.toLowerCase()];\n};\nexports.getAdjust = getAdjust;\n/**\n * 注册自定义 Adjust\n * @param type\n * @param ctor\n */\nvar registerAdjust = function (type, ctor) {\n // 注册的时候,需要校验 type 重名,不区分大小写\n if (getAdjust(type)) {\n throw new Error(\"Adjust type '\" + type + \"' existed.\");\n }\n // 存储到 map 中\n ADJUST_MAP[type.toLowerCase()] = ctor;\n};\nexports.registerAdjust = registerAdjust;\ntslib_1.__exportStar(require(\"./interface\"), exports);\n//# sourceMappingURL=factory.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar _ = require(\"@antv/util\");\nvar constant_1 = require(\"../constant\");\nvar Adjust = /** @class */ (function () {\n function Adjust(cfg) {\n var xField = cfg.xField, yField = cfg.yField, _a = cfg.adjustNames, adjustNames = _a === void 0 ? ['x', 'y'] : _a, dimValuesMap = cfg.dimValuesMap;\n this.adjustNames = adjustNames;\n this.xField = xField;\n this.yField = yField;\n this.dimValuesMap = dimValuesMap;\n }\n /**\n * 查看维度是否是 adjust 字段\n * @param dim\n */\n Adjust.prototype.isAdjust = function (dim) {\n return this.adjustNames.indexOf(dim) >= 0;\n };\n Adjust.prototype.getAdjustRange = function (dim, dimValue, values) {\n var yField = this.yField;\n var index = values.indexOf(dimValue);\n var length = values.length;\n var pre;\n var next;\n // 没有 y 字段,但是需要根据 y 调整\n if (!yField && this.isAdjust('y')) {\n pre = 0;\n next = 1;\n }\n else if (length > 1) {\n // 如果以其开头,则取之,否则取他前面一个\n pre = values[index === 0 ? 0 : index - 1];\n // 如果以其结尾,则取之,否则取他后面一个\n next = values[index === length - 1 ? length - 1 : index + 1];\n if (index !== 0) {\n pre += (dimValue - pre) / 2;\n }\n else {\n pre -= (next - dimValue) / 2;\n }\n if (index !== length - 1) {\n next -= (next - dimValue) / 2;\n }\n else {\n next += (dimValue - values[length - 2]) / 2;\n }\n }\n else {\n pre = dimValue === 0 ? 0 : dimValue - 0.5;\n next = dimValue === 0 ? 1 : dimValue + 0.5;\n }\n return {\n pre: pre,\n next: next,\n };\n };\n Adjust.prototype.adjustData = function (groupedDataArray, mergedData) {\n var _this = this;\n // 所有调整维度的值数组\n var dimValuesMap = this.getDimValues(mergedData);\n // 按照每一个分组来进行调整\n _.each(groupedDataArray, function (dataArray, index) {\n // 遍历所有数据集合\n // 每个分组中,分别按照不同的 dim 进行调整\n _.each(dimValuesMap, function (values, dim) {\n // 根据不同的度量分别调整位置\n _this.adjustDim(dim, values, dataArray, index);\n });\n });\n };\n /**\n * 对数据进行分组adjustData\n * @param data 数据\n * @param dim 分组的字段\n * @return 分组结果\n */\n Adjust.prototype.groupData = function (data, dim) {\n // 补齐数据空数据为默认值\n _.each(data, function (record) {\n if (record[dim] === undefined) {\n record[dim] = constant_1.DEFAULT_Y;\n }\n });\n // 按照 dim 维度分组\n return _.groupBy(data, dim);\n };\n /** @override */\n Adjust.prototype.adjustDim = function (dim, values, data, index) { };\n /**\n * 获取可调整度量对应的值\n * @param mergedData 数据\n * @return 值的映射\n */\n Adjust.prototype.getDimValues = function (mergedData) {\n var _a = this, xField = _a.xField, yField = _a.yField;\n var dimValuesMap = _.assign({}, this.dimValuesMap);\n // 所有的维度\n var dims = [];\n if (xField && this.isAdjust('x')) {\n dims.push(xField);\n }\n if (yField && this.isAdjust('y')) {\n dims.push(yField);\n }\n dims.forEach(function (dim) {\n if (dimValuesMap && dimValuesMap[dim]) {\n return;\n }\n // 在每个维度上,所有的值\n dimValuesMap[dim] = _.valuesOfKey(mergedData, dim).sort(function (v1, v2) { return v1 - v2; });\n });\n // 只有一维的情况下,同时调整 y,赋予默认值\n if (!yField && this.isAdjust('y')) {\n var dim = 'y';\n dimValuesMap[dim] = [constant_1.DEFAULT_Y, 1]; // 默认分布在 y 轴的 0 与 1 之间\n }\n return dimValuesMap;\n };\n return Adjust;\n}());\nexports.default = Adjust;\n//# sourceMappingURL=adjust.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GAP = exports.DODGE_RATIO = exports.MARGIN_RATIO = exports.DEFAULT_Y = void 0;\nexports.DEFAULT_Y = 0; // 默认的 y 的值\n// 偏移之后,间距\nexports.MARGIN_RATIO = 1 / 2;\nexports.DODGE_RATIO = 1 / 2;\n// 散点分开之后,距离边界的距离\nexports.GAP = 0.05;\n//# sourceMappingURL=constant.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=interface.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar _ = require(\"@antv/util\");\nvar constant_1 = require(\"../constant\");\nvar adjust_1 = require(\"./adjust\");\nvar Dodge = /** @class */ (function (_super) {\n tslib_1.__extends(Dodge, _super);\n function Dodge(cfg) {\n var _this = _super.call(this, cfg) || this;\n _this.cacheMap = {};\n _this.adjustDataArray = [];\n _this.mergeData = [];\n var _a = cfg.marginRatio, marginRatio = _a === void 0 ? constant_1.MARGIN_RATIO : _a, _b = cfg.dodgeRatio, dodgeRatio = _b === void 0 ? constant_1.DODGE_RATIO : _b, dodgeBy = cfg.dodgeBy, intervalPadding = cfg.intervalPadding, dodgePadding = cfg.dodgePadding, xDimensionLength = cfg.xDimensionLength, groupNum = cfg.groupNum, defaultSize = cfg.defaultSize, maxColumnWidth = cfg.maxColumnWidth, minColumnWidth = cfg.minColumnWidth, columnWidthRatio = cfg.columnWidthRatio, customOffset = cfg.customOffset;\n _this.marginRatio = marginRatio;\n _this.dodgeRatio = dodgeRatio;\n _this.dodgeBy = dodgeBy;\n _this.intervalPadding = intervalPadding;\n _this.dodgePadding = dodgePadding;\n _this.xDimensionLegenth = xDimensionLength;\n _this.groupNum = groupNum;\n _this.defaultSize = defaultSize;\n _this.maxColumnWidth = maxColumnWidth;\n _this.minColumnWidth = minColumnWidth;\n _this.columnWidthRatio = columnWidthRatio;\n _this.customOffset = customOffset;\n return _this;\n }\n Dodge.prototype.process = function (groupDataArray) {\n var groupedDataArray = _.clone(groupDataArray);\n // 将数据数组展开一层\n var mergeData = _.flatten(groupedDataArray);\n var dodgeBy = this.dodgeBy;\n // 如果指定了分组 dim 的字段\n var adjustDataArray = dodgeBy ? _.group(mergeData, dodgeBy) : groupedDataArray;\n this.cacheMap = {};\n this.adjustDataArray = adjustDataArray;\n this.mergeData = mergeData;\n this.adjustData(adjustDataArray, mergeData);\n this.adjustDataArray = [];\n this.mergeData = [];\n return groupedDataArray;\n };\n Dodge.prototype.adjustDim = function (dim, values, data, frameIndex) {\n var _this = this;\n var customOffset = this.customOffset;\n var map = this.getDistribution(dim);\n var groupData = this.groupData(data, dim); // 根据值分组\n _.each(groupData, function (group, key) {\n var range;\n // xField 中只有一个值,不需要做 dodge\n if (values.length === 1) {\n range = {\n pre: values[0] - 1,\n next: values[0] + 1,\n };\n }\n else {\n // 如果有多个,则需要获取调整的范围\n range = _this.getAdjustRange(dim, parseFloat(key), values);\n }\n _.each(group, function (d) {\n var value = d[dim];\n var valueArr = map[value];\n var valIndex = valueArr.indexOf(frameIndex);\n if (!_.isNil(customOffset)) {\n var pre = range.pre, next = range.next;\n d[dim] = _.isFunction(customOffset) ? customOffset(d, range) : (pre + next) / 2 + customOffset;\n }\n else {\n d[dim] = _this.getDodgeOffset(range, valIndex, valueArr.length);\n }\n });\n });\n return [];\n };\n Dodge.prototype.getDodgeOffset = function (range, idx, len) {\n var _a = this, dodgeRatio = _a.dodgeRatio, marginRatio = _a.marginRatio, intervalPadding = _a.intervalPadding, dodgePadding = _a.dodgePadding;\n var pre = range.pre, next = range.next;\n var tickLength = next - pre;\n var position;\n // 分多种输入情况\n if (!_.isNil(intervalPadding) && _.isNil(dodgePadding) && intervalPadding >= 0) {\n // 仅配置intervalPadding\n var offset = this.getIntervalOnlyOffset(len, idx);\n position = pre + offset;\n }\n else if (!_.isNil(dodgePadding) && _.isNil(intervalPadding) && dodgePadding >= 0) {\n // 仅配置dodgePadding\n var offset = this.getDodgeOnlyOffset(len, idx);\n position = pre + offset;\n }\n else if (!_.isNil(intervalPadding) &&\n !_.isNil(dodgePadding) &&\n intervalPadding >= 0 &&\n dodgePadding >= 0) {\n // 同时配置intervalPadding和dodgePadding\n var offset = this.getIntervalAndDodgeOffset(len, idx);\n position = pre + offset;\n }\n else {\n // 默认情况\n var width = (tickLength * dodgeRatio) / len;\n var margin = marginRatio * width;\n var offset = (1 / 2) * (tickLength - len * width - (len - 1) * margin) +\n ((idx + 1) * width + idx * margin) -\n (1 / 2) * width -\n (1 / 2) * tickLength;\n position = (pre + next) / 2 + offset;\n }\n return position;\n };\n Dodge.prototype.getIntervalOnlyOffset = function (len, idx) {\n var _a = this, defaultSize = _a.defaultSize, intervalPadding = _a.intervalPadding, xDimensionLegenth = _a.xDimensionLegenth, groupNum = _a.groupNum, dodgeRatio = _a.dodgeRatio, maxColumnWidth = _a.maxColumnWidth, minColumnWidth = _a.minColumnWidth, columnWidthRatio = _a.columnWidthRatio;\n var normalizedIntervalPadding = intervalPadding / xDimensionLegenth;\n var normalizedDodgePadding = (1 - (groupNum - 1) * normalizedIntervalPadding) / groupNum * dodgeRatio / (len - 1);\n var geomWidth = ((1 - normalizedIntervalPadding * (groupNum - 1)) / groupNum - normalizedDodgePadding * (len - 1)) / len;\n // 根据columnWidthRatio/defaultSize/maxColumnWidth/minColumnWidth调整宽度\n geomWidth = (!_.isNil(columnWidthRatio)) ? 1 / groupNum / len * columnWidthRatio : geomWidth;\n if (!_.isNil(maxColumnWidth)) {\n var normalizedMaxWidht = maxColumnWidth / xDimensionLegenth;\n geomWidth = Math.min(geomWidth, normalizedMaxWidht);\n }\n if (!_.isNil(minColumnWidth)) {\n var normalizedMinWidht = minColumnWidth / xDimensionLegenth;\n geomWidth = Math.max(geomWidth, normalizedMinWidht);\n }\n geomWidth = defaultSize ? (defaultSize / xDimensionLegenth) : geomWidth;\n // 调整组内间隔\n normalizedDodgePadding = ((1 - (groupNum - 1) * normalizedIntervalPadding) / groupNum - len * geomWidth) / (len - 1);\n var offset = ((1 / 2 + idx) * geomWidth + idx * normalizedDodgePadding +\n (1 / 2) * normalizedIntervalPadding) * groupNum -\n normalizedIntervalPadding / 2;\n return offset;\n };\n Dodge.prototype.getDodgeOnlyOffset = function (len, idx) {\n var _a = this, defaultSize = _a.defaultSize, dodgePadding = _a.dodgePadding, xDimensionLegenth = _a.xDimensionLegenth, groupNum = _a.groupNum, marginRatio = _a.marginRatio, maxColumnWidth = _a.maxColumnWidth, minColumnWidth = _a.minColumnWidth, columnWidthRatio = _a.columnWidthRatio;\n var normalizedDodgePadding = dodgePadding / xDimensionLegenth;\n var normalizedIntervalPadding = 1 * marginRatio / (groupNum - 1);\n var geomWidth = ((1 - normalizedIntervalPadding * (groupNum - 1)) / groupNum - normalizedDodgePadding * (len - 1)) / len;\n // 根据columnWidthRatio/defaultSize/maxColumnWidth/minColumnWidth调整宽度\n geomWidth = columnWidthRatio ? 1 / groupNum / len * columnWidthRatio : geomWidth;\n if (!_.isNil(maxColumnWidth)) {\n var normalizedMaxWidht = maxColumnWidth / xDimensionLegenth;\n geomWidth = Math.min(geomWidth, normalizedMaxWidht);\n }\n if (!_.isNil(minColumnWidth)) {\n var normalizedMinWidht = minColumnWidth / xDimensionLegenth;\n geomWidth = Math.max(geomWidth, normalizedMinWidht);\n }\n geomWidth = defaultSize ? (defaultSize / xDimensionLegenth) : geomWidth;\n // 调整组间距\n normalizedIntervalPadding = (1 - (geomWidth * len + normalizedDodgePadding * (len - 1)) * groupNum) / (groupNum - 1);\n var offset = ((1 / 2 + idx) * geomWidth + idx * normalizedDodgePadding +\n (1 / 2) * normalizedIntervalPadding) * groupNum -\n normalizedIntervalPadding / 2;\n return offset;\n };\n Dodge.prototype.getIntervalAndDodgeOffset = function (len, idx) {\n var _a = this, intervalPadding = _a.intervalPadding, dodgePadding = _a.dodgePadding, xDimensionLegenth = _a.xDimensionLegenth, groupNum = _a.groupNum;\n var normalizedIntervalPadding = intervalPadding / xDimensionLegenth;\n var normalizedDodgePadding = dodgePadding / xDimensionLegenth;\n var geomWidth = ((1 - normalizedIntervalPadding * (groupNum - 1)) / groupNum - normalizedDodgePadding * (len - 1)) / len;\n var offset = ((1 / 2 + idx) * geomWidth + idx * normalizedDodgePadding +\n (1 / 2) * normalizedIntervalPadding) * groupNum -\n normalizedIntervalPadding / 2;\n return offset;\n };\n Dodge.prototype.getDistribution = function (dim) {\n var groupedDataArray = this.adjustDataArray;\n var cacheMap = this.cacheMap;\n var map = cacheMap[dim];\n if (!map) {\n map = {};\n _.each(groupedDataArray, function (data, index) {\n var values = _.valuesOfKey(data, dim);\n if (!values.length) {\n values.push(0);\n }\n _.each(values, function (val) {\n if (!map[val]) {\n map[val] = [];\n }\n map[val].push(index);\n });\n });\n cacheMap[dim] = map;\n }\n return map;\n };\n return Dodge;\n}(adjust_1.default));\nexports.default = Dodge;\n//# sourceMappingURL=dodge.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar _ = require(\"@antv/util\");\nvar constant_1 = require(\"../constant\");\nvar adjust_1 = require(\"./adjust\");\nfunction randomNumber(min, max) {\n return (max - min) * Math.random() + min;\n}\nvar Jitter = /** @class */ (function (_super) {\n tslib_1.__extends(Jitter, _super);\n function Jitter() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Jitter.prototype.process = function (groupDataArray) {\n var groupedDataArray = _.clone(groupDataArray);\n // 之前分组之后的数据,然后有合并回去(和分组前可以理解成是一样的)\n var mergeData = _.flatten(groupedDataArray);\n // 返回值\n this.adjustData(groupedDataArray, mergeData);\n return groupedDataArray;\n };\n /**\n * 当前数据分组(index)中,按照维度 dim 进行 jitter 调整\n * @param dim\n * @param values\n * @param dataArray\n */\n Jitter.prototype.adjustDim = function (dim, values, dataArray) {\n var _this = this;\n // 在每一个分组中,将数据再按照 dim 分组,用于散列\n var groupDataArray = this.groupData(dataArray, dim);\n return _.each(groupDataArray, function (data, dimValue) {\n return _this.adjustGroup(data, dim, parseFloat(dimValue), values);\n });\n };\n // 随机出来的字段值\n Jitter.prototype.getAdjustOffset = function (range) {\n var pre = range.pre, next = range.next;\n // 随机的范围\n var margin = (next - pre) * constant_1.GAP;\n return randomNumber(pre + margin, next - margin);\n };\n // adjust group data\n Jitter.prototype.adjustGroup = function (group, dim, dimValue, values) {\n var _this = this;\n // 调整范围\n var range = this.getAdjustRange(dim, dimValue, values);\n _.each(group, function (data) {\n data[dim] = _this.getAdjustOffset(range); // 获取调整的位置\n });\n return group;\n };\n return Jitter;\n}(adjust_1.default));\nexports.default = Jitter;\n//# sourceMappingURL=jitter.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar _ = require(\"@antv/util\");\nvar adjust_1 = require(\"./adjust\");\nvar Cache = _.Cache;\nvar Stack = /** @class */ (function (_super) {\n tslib_1.__extends(Stack, _super);\n function Stack(cfg) {\n var _this = _super.call(this, cfg) || this;\n var _a = cfg.adjustNames, adjustNames = _a === void 0 ? ['y'] : _a, _b = cfg.height, height = _b === void 0 ? NaN : _b, _c = cfg.size, size = _c === void 0 ? 10 : _c, _d = cfg.reverseOrder, reverseOrder = _d === void 0 ? false : _d;\n _this.adjustNames = adjustNames;\n _this.height = height;\n _this.size = size;\n _this.reverseOrder = reverseOrder;\n return _this;\n }\n /**\n * 方法入参是经过数据分组、数据数字化之后的二维数组\n * @param groupDataArray 分组之后的数据\n */\n Stack.prototype.process = function (groupDataArray) {\n var _a = this, yField = _a.yField, reverseOrder = _a.reverseOrder;\n // 如果有指定 y 字段,那么按照 y 字段来 stack\n // 否则,按照高度均分\n var d = yField ? this.processStack(groupDataArray) : this.processOneDimStack(groupDataArray);\n return reverseOrder ? this.reverse(d) : d;\n };\n Stack.prototype.reverse = function (groupedDataArray) {\n return groupedDataArray.slice(0).reverse();\n };\n Stack.prototype.processStack = function (groupDataArray) {\n var _a = this, xField = _a.xField, yField = _a.yField, reverseOrder = _a.reverseOrder;\n // 层叠顺序翻转\n var groupedDataArray = reverseOrder ? this.reverse(groupDataArray) : groupDataArray;\n // 用来缓存,正数和负数的堆叠问题\n var positive = new Cache();\n var negative = new Cache();\n return groupedDataArray.map(function (dataArray) {\n return dataArray.map(function (data) {\n var _a;\n var x = _.get(data, xField, 0);\n var y = _.get(data, [yField]);\n var xKey = x.toString();\n // todo 是否应该取 _origin?因为 y 可能取到的值不正确,比如先 symmetric,再 stack!\n y = _.isArray(y) ? y[1] : y;\n if (!_.isNil(y)) {\n var cache = y >= 0 ? positive : negative;\n if (!cache.has(xKey)) {\n cache.set(xKey, 0);\n }\n var xValue = cache.get(xKey);\n var newXValue = y + xValue;\n // 存起来\n cache.set(xKey, newXValue);\n return tslib_1.__assign(tslib_1.__assign({}, data), (_a = {}, _a[yField] = [xValue, newXValue], _a));\n }\n // 没有修改,则直接返回\n return data;\n });\n });\n };\n Stack.prototype.processOneDimStack = function (groupDataArray) {\n var _this = this;\n var _a = this, xField = _a.xField, height = _a.height, reverseOrder = _a.reverseOrder;\n var yField = 'y';\n // 如果层叠的顺序翻转\n var groupedDataArray = reverseOrder ? this.reverse(groupDataArray) : groupDataArray;\n // 缓存累加数据\n var cache = new Cache();\n return groupedDataArray.map(function (dataArray) {\n return dataArray.map(function (data) {\n var _a;\n var size = _this.size;\n var xValue = data[xField];\n // todo 没有看到这个 stack 计算原理\n var stackHeight = (size * 2) / height;\n if (!cache.has(xValue)) {\n cache.set(xValue, stackHeight / 2); // 初始值大小\n }\n var stackValue = cache.get(xValue);\n // 增加一层 stackHeight\n cache.set(xValue, stackValue + stackHeight);\n return tslib_1.__assign(tslib_1.__assign({}, data), (_a = {}, _a[yField] = stackValue, _a));\n });\n });\n };\n return Stack;\n}(adjust_1.default));\nexports.default = Stack;\n//# sourceMappingURL=stack.js.map","\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar _ = require(\"@antv/util\");\nvar adjust_1 = require(\"./adjust\");\nvar Symmetric = /** @class */ (function (_super) {\n tslib_1.__extends(Symmetric, _super);\n function Symmetric() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Symmetric.prototype.process = function (groupDataArray) {\n var mergeData = _.flatten(groupDataArray);\n var _a = this, xField = _a.xField, yField = _a.yField;\n // 每个 x 值对应的 最大值\n var cache = this.getXValuesMaxMap(mergeData);\n // 所有数据的最大的值\n var max = Math.max.apply(Math, Object.keys(cache).map(function (key) { return cache[key]; }));\n return _.map(groupDataArray, function (dataArray) {\n return _.map(dataArray, function (data) {\n var _a, _b;\n var yValue = data[yField];\n var xValue = data[xField];\n // 数组处理逻辑\n if (_.isArray(yValue)) {\n var off_1 = (max - cache[xValue]) / 2;\n return tslib_1.__assign(tslib_1.__assign({}, data), (_a = {}, _a[yField] = _.map(yValue, function (y) { return off_1 + y; }), _a));\n }\n // 非数组处理逻辑\n var offset = (max - yValue) / 2;\n return tslib_1.__assign(tslib_1.__assign({}, data), (_b = {}, _b[yField] = [offset, yValue + offset], _b));\n });\n });\n };\n // 获取每个 x 对应的最大的值\n Symmetric.prototype.getXValuesMaxMap = function (mergeData) {\n var _this = this;\n var _a = this, xField = _a.xField, yField = _a.yField;\n // 根据 xField 的值进行分组\n var groupDataArray = _.groupBy(mergeData, function (data) { return data[xField]; });\n // 获取每个 xField 值中的最大值\n return _.mapValues(groupDataArray, function (dataArray) { return _this.getDimMaxValue(dataArray, yField); });\n };\n Symmetric.prototype.getDimMaxValue = function (mergeData, dim) {\n // 所有的 value 值\n var dimValues = _.map(mergeData, function (data) { return _.get(data, dim, []); });\n // 将数组打平(dim value 有可能是数组,比如 stack 之后的)\n var flattenValues = _.flatten(dimValues);\n // 求出数组的最大值\n return Math.max.apply(Math, flattenValues);\n };\n return Symmetric;\n}(adjust_1.default));\nexports.default = Symmetric;\n//# sourceMappingURL=symmetric.js.map"]}
|