index.js 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611
  1. module.exports = (function() {
  2. var __MODS__ = {};
  3. var __DEFINE__ = function(modId, func, req) { var m = { exports: {}, _tempexports: {} }; __MODS__[modId] = { status: 0, func: func, req: req, m: m }; };
  4. var __REQUIRE__ = function(modId, source) { if(!__MODS__[modId]) return require(source); if(!__MODS__[modId].status) { var m = __MODS__[modId].m; m._exports = m._tempexports; var desp = Object.getOwnPropertyDescriptor(m, "exports"); if (desp && desp.configurable) Object.defineProperty(m, "exports", { set: function (val) { if(typeof val === "object" && val !== m._exports) { m._exports.__proto__ = val.__proto__; Object.keys(val).forEach(function (k) { m._exports[k] = val[k]; }); } m._tempexports = val }, get: function () { return m._tempexports; } }); __MODS__[modId].status = 1; __MODS__[modId].func(__MODS__[modId].req, m, m.exports); } return __MODS__[modId].m.exports; };
  5. var __REQUIRE_WILDCARD__ = function(obj) { if(obj && obj.__esModule) { return obj; } else { var newObj = {}; if(obj != null) { for(var k in obj) { if (Object.prototype.hasOwnProperty.call(obj, k)) newObj[k] = obj[k]; } } newObj.default = obj; return newObj; } };
  6. var __REQUIRE_DEFAULT__ = function(obj) { return obj && obj.__esModule ? obj.default : obj; };
  7. __DEFINE__(1679043784138, function(require, module, exports) {
  8. Object.defineProperty(exports, "__esModule", { value: true });
  9. exports.Adjust = exports.registerAdjust = exports.getAdjust = void 0;
  10. var tslib_1 = require("tslib");
  11. var factory_1 = require("./factory");
  12. Object.defineProperty(exports, "getAdjust", { enumerable: true, get: function () { return factory_1.getAdjust; } });
  13. Object.defineProperty(exports, "registerAdjust", { enumerable: true, get: function () { return factory_1.registerAdjust; } });
  14. var adjust_1 = require("./adjusts/adjust");
  15. exports.Adjust = adjust_1.default;
  16. var dodge_1 = require("./adjusts/dodge");
  17. var jitter_1 = require("./adjusts/jitter");
  18. var stack_1 = require("./adjusts/stack");
  19. var symmetric_1 = require("./adjusts/symmetric");
  20. // 注册内置的 adjust
  21. factory_1.registerAdjust('Dodge', dodge_1.default);
  22. factory_1.registerAdjust('Jitter', jitter_1.default);
  23. factory_1.registerAdjust('Stack', stack_1.default);
  24. factory_1.registerAdjust('Symmetric', symmetric_1.default);
  25. tslib_1.__exportStar(require("./interface"), exports);
  26. //# sourceMappingURL=index.js.map
  27. }, function(modId) {var map = {"./factory":1679043784139,"./adjusts/adjust":1679043784140,"./adjusts/dodge":1679043784143,"./adjusts/jitter":1679043784144,"./adjusts/stack":1679043784145,"./adjusts/symmetric":1679043784146,"./interface":1679043784142}; return __REQUIRE__(map[modId], modId); })
  28. __DEFINE__(1679043784139, function(require, module, exports) {
  29. Object.defineProperty(exports, "__esModule", { value: true });
  30. exports.Adjust = exports.registerAdjust = exports.getAdjust = void 0;
  31. var tslib_1 = require("tslib");
  32. var adjust_1 = require("./adjusts/adjust");
  33. exports.Adjust = adjust_1.default;
  34. var ADJUST_MAP = {};
  35. /**
  36. * 根据类型获取 Adjust 类
  37. * @param type
  38. */
  39. var getAdjust = function (type) {
  40. return ADJUST_MAP[type.toLowerCase()];
  41. };
  42. exports.getAdjust = getAdjust;
  43. /**
  44. * 注册自定义 Adjust
  45. * @param type
  46. * @param ctor
  47. */
  48. var registerAdjust = function (type, ctor) {
  49. // 注册的时候,需要校验 type 重名,不区分大小写
  50. if (getAdjust(type)) {
  51. throw new Error("Adjust type '" + type + "' existed.");
  52. }
  53. // 存储到 map 中
  54. ADJUST_MAP[type.toLowerCase()] = ctor;
  55. };
  56. exports.registerAdjust = registerAdjust;
  57. tslib_1.__exportStar(require("./interface"), exports);
  58. //# sourceMappingURL=factory.js.map
  59. }, function(modId) { var map = {"./adjusts/adjust":1679043784140,"./interface":1679043784142}; return __REQUIRE__(map[modId], modId); })
  60. __DEFINE__(1679043784140, function(require, module, exports) {
  61. Object.defineProperty(exports, "__esModule", { value: true });
  62. var _ = require("@antv/util");
  63. var constant_1 = require("../constant");
  64. var Adjust = /** @class */ (function () {
  65. function Adjust(cfg) {
  66. var xField = cfg.xField, yField = cfg.yField, _a = cfg.adjustNames, adjustNames = _a === void 0 ? ['x', 'y'] : _a, dimValuesMap = cfg.dimValuesMap;
  67. this.adjustNames = adjustNames;
  68. this.xField = xField;
  69. this.yField = yField;
  70. this.dimValuesMap = dimValuesMap;
  71. }
  72. /**
  73. * 查看维度是否是 adjust 字段
  74. * @param dim
  75. */
  76. Adjust.prototype.isAdjust = function (dim) {
  77. return this.adjustNames.indexOf(dim) >= 0;
  78. };
  79. Adjust.prototype.getAdjustRange = function (dim, dimValue, values) {
  80. var yField = this.yField;
  81. var index = values.indexOf(dimValue);
  82. var length = values.length;
  83. var pre;
  84. var next;
  85. // 没有 y 字段,但是需要根据 y 调整
  86. if (!yField && this.isAdjust('y')) {
  87. pre = 0;
  88. next = 1;
  89. }
  90. else if (length > 1) {
  91. // 如果以其开头,则取之,否则取他前面一个
  92. pre = values[index === 0 ? 0 : index - 1];
  93. // 如果以其结尾,则取之,否则取他后面一个
  94. next = values[index === length - 1 ? length - 1 : index + 1];
  95. if (index !== 0) {
  96. pre += (dimValue - pre) / 2;
  97. }
  98. else {
  99. pre -= (next - dimValue) / 2;
  100. }
  101. if (index !== length - 1) {
  102. next -= (next - dimValue) / 2;
  103. }
  104. else {
  105. next += (dimValue - values[length - 2]) / 2;
  106. }
  107. }
  108. else {
  109. pre = dimValue === 0 ? 0 : dimValue - 0.5;
  110. next = dimValue === 0 ? 1 : dimValue + 0.5;
  111. }
  112. return {
  113. pre: pre,
  114. next: next,
  115. };
  116. };
  117. Adjust.prototype.adjustData = function (groupedDataArray, mergedData) {
  118. var _this = this;
  119. // 所有调整维度的值数组
  120. var dimValuesMap = this.getDimValues(mergedData);
  121. // 按照每一个分组来进行调整
  122. _.each(groupedDataArray, function (dataArray, index) {
  123. // 遍历所有数据集合
  124. // 每个分组中,分别按照不同的 dim 进行调整
  125. _.each(dimValuesMap, function (values, dim) {
  126. // 根据不同的度量分别调整位置
  127. _this.adjustDim(dim, values, dataArray, index);
  128. });
  129. });
  130. };
  131. /**
  132. * 对数据进行分组adjustData
  133. * @param data 数据
  134. * @param dim 分组的字段
  135. * @return 分组结果
  136. */
  137. Adjust.prototype.groupData = function (data, dim) {
  138. // 补齐数据空数据为默认值
  139. _.each(data, function (record) {
  140. if (record[dim] === undefined) {
  141. record[dim] = constant_1.DEFAULT_Y;
  142. }
  143. });
  144. // 按照 dim 维度分组
  145. return _.groupBy(data, dim);
  146. };
  147. /** @override */
  148. Adjust.prototype.adjustDim = function (dim, values, data, index) { };
  149. /**
  150. * 获取可调整度量对应的值
  151. * @param mergedData 数据
  152. * @return 值的映射
  153. */
  154. Adjust.prototype.getDimValues = function (mergedData) {
  155. var _a = this, xField = _a.xField, yField = _a.yField;
  156. var dimValuesMap = _.assign({}, this.dimValuesMap);
  157. // 所有的维度
  158. var dims = [];
  159. if (xField && this.isAdjust('x')) {
  160. dims.push(xField);
  161. }
  162. if (yField && this.isAdjust('y')) {
  163. dims.push(yField);
  164. }
  165. dims.forEach(function (dim) {
  166. if (dimValuesMap && dimValuesMap[dim]) {
  167. return;
  168. }
  169. // 在每个维度上,所有的值
  170. dimValuesMap[dim] = _.valuesOfKey(mergedData, dim).sort(function (v1, v2) { return v1 - v2; });
  171. });
  172. // 只有一维的情况下,同时调整 y,赋予默认值
  173. if (!yField && this.isAdjust('y')) {
  174. var dim = 'y';
  175. dimValuesMap[dim] = [constant_1.DEFAULT_Y, 1]; // 默认分布在 y 轴的 0 与 1 之间
  176. }
  177. return dimValuesMap;
  178. };
  179. return Adjust;
  180. }());
  181. exports.default = Adjust;
  182. //# sourceMappingURL=adjust.js.map
  183. }, function(modId) { var map = {"../constant":1679043784141}; return __REQUIRE__(map[modId], modId); })
  184. __DEFINE__(1679043784141, function(require, module, exports) {
  185. Object.defineProperty(exports, "__esModule", { value: true });
  186. exports.GAP = exports.DODGE_RATIO = exports.MARGIN_RATIO = exports.DEFAULT_Y = void 0;
  187. exports.DEFAULT_Y = 0; // 默认的 y 的值
  188. // 偏移之后,间距
  189. exports.MARGIN_RATIO = 1 / 2;
  190. exports.DODGE_RATIO = 1 / 2;
  191. // 散点分开之后,距离边界的距离
  192. exports.GAP = 0.05;
  193. //# sourceMappingURL=constant.js.map
  194. }, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); })
  195. __DEFINE__(1679043784142, function(require, module, exports) {
  196. Object.defineProperty(exports, "__esModule", { value: true });
  197. //# sourceMappingURL=interface.js.map
  198. }, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); })
  199. __DEFINE__(1679043784143, function(require, module, exports) {
  200. Object.defineProperty(exports, "__esModule", { value: true });
  201. var tslib_1 = require("tslib");
  202. var _ = require("@antv/util");
  203. var constant_1 = require("../constant");
  204. var adjust_1 = require("./adjust");
  205. var Dodge = /** @class */ (function (_super) {
  206. tslib_1.__extends(Dodge, _super);
  207. function Dodge(cfg) {
  208. var _this = _super.call(this, cfg) || this;
  209. _this.cacheMap = {};
  210. _this.adjustDataArray = [];
  211. _this.mergeData = [];
  212. 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;
  213. _this.marginRatio = marginRatio;
  214. _this.dodgeRatio = dodgeRatio;
  215. _this.dodgeBy = dodgeBy;
  216. _this.intervalPadding = intervalPadding;
  217. _this.dodgePadding = dodgePadding;
  218. _this.xDimensionLegenth = xDimensionLength;
  219. _this.groupNum = groupNum;
  220. _this.defaultSize = defaultSize;
  221. _this.maxColumnWidth = maxColumnWidth;
  222. _this.minColumnWidth = minColumnWidth;
  223. _this.columnWidthRatio = columnWidthRatio;
  224. _this.customOffset = customOffset;
  225. return _this;
  226. }
  227. Dodge.prototype.process = function (groupDataArray) {
  228. var groupedDataArray = _.clone(groupDataArray);
  229. // 将数据数组展开一层
  230. var mergeData = _.flatten(groupedDataArray);
  231. var dodgeBy = this.dodgeBy;
  232. // 如果指定了分组 dim 的字段
  233. var adjustDataArray = dodgeBy ? _.group(mergeData, dodgeBy) : groupedDataArray;
  234. this.cacheMap = {};
  235. this.adjustDataArray = adjustDataArray;
  236. this.mergeData = mergeData;
  237. this.adjustData(adjustDataArray, mergeData);
  238. this.adjustDataArray = [];
  239. this.mergeData = [];
  240. return groupedDataArray;
  241. };
  242. Dodge.prototype.adjustDim = function (dim, values, data, frameIndex) {
  243. var _this = this;
  244. var customOffset = this.customOffset;
  245. var map = this.getDistribution(dim);
  246. var groupData = this.groupData(data, dim); // 根据值分组
  247. _.each(groupData, function (group, key) {
  248. var range;
  249. // xField 中只有一个值,不需要做 dodge
  250. if (values.length === 1) {
  251. range = {
  252. pre: values[0] - 1,
  253. next: values[0] + 1,
  254. };
  255. }
  256. else {
  257. // 如果有多个,则需要获取调整的范围
  258. range = _this.getAdjustRange(dim, parseFloat(key), values);
  259. }
  260. _.each(group, function (d) {
  261. var value = d[dim];
  262. var valueArr = map[value];
  263. var valIndex = valueArr.indexOf(frameIndex);
  264. if (!_.isNil(customOffset)) {
  265. var pre = range.pre, next = range.next;
  266. d[dim] = _.isFunction(customOffset) ? customOffset(d, range) : (pre + next) / 2 + customOffset;
  267. }
  268. else {
  269. d[dim] = _this.getDodgeOffset(range, valIndex, valueArr.length);
  270. }
  271. });
  272. });
  273. return [];
  274. };
  275. Dodge.prototype.getDodgeOffset = function (range, idx, len) {
  276. var _a = this, dodgeRatio = _a.dodgeRatio, marginRatio = _a.marginRatio, intervalPadding = _a.intervalPadding, dodgePadding = _a.dodgePadding;
  277. var pre = range.pre, next = range.next;
  278. var tickLength = next - pre;
  279. var position;
  280. // 分多种输入情况
  281. if (!_.isNil(intervalPadding) && _.isNil(dodgePadding) && intervalPadding >= 0) {
  282. // 仅配置intervalPadding
  283. var offset = this.getIntervalOnlyOffset(len, idx);
  284. position = pre + offset;
  285. }
  286. else if (!_.isNil(dodgePadding) && _.isNil(intervalPadding) && dodgePadding >= 0) {
  287. // 仅配置dodgePadding
  288. var offset = this.getDodgeOnlyOffset(len, idx);
  289. position = pre + offset;
  290. }
  291. else if (!_.isNil(intervalPadding) &&
  292. !_.isNil(dodgePadding) &&
  293. intervalPadding >= 0 &&
  294. dodgePadding >= 0) {
  295. // 同时配置intervalPadding和dodgePadding
  296. var offset = this.getIntervalAndDodgeOffset(len, idx);
  297. position = pre + offset;
  298. }
  299. else {
  300. // 默认情况
  301. var width = (tickLength * dodgeRatio) / len;
  302. var margin = marginRatio * width;
  303. var offset = (1 / 2) * (tickLength - len * width - (len - 1) * margin) +
  304. ((idx + 1) * width + idx * margin) -
  305. (1 / 2) * width -
  306. (1 / 2) * tickLength;
  307. position = (pre + next) / 2 + offset;
  308. }
  309. return position;
  310. };
  311. Dodge.prototype.getIntervalOnlyOffset = function (len, idx) {
  312. 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;
  313. var normalizedIntervalPadding = intervalPadding / xDimensionLegenth;
  314. var normalizedDodgePadding = (1 - (groupNum - 1) * normalizedIntervalPadding) / groupNum * dodgeRatio / (len - 1);
  315. var geomWidth = ((1 - normalizedIntervalPadding * (groupNum - 1)) / groupNum - normalizedDodgePadding * (len - 1)) / len;
  316. // 根据columnWidthRatio/defaultSize/maxColumnWidth/minColumnWidth调整宽度
  317. geomWidth = (!_.isNil(columnWidthRatio)) ? 1 / groupNum / len * columnWidthRatio : geomWidth;
  318. if (!_.isNil(maxColumnWidth)) {
  319. var normalizedMaxWidht = maxColumnWidth / xDimensionLegenth;
  320. geomWidth = Math.min(geomWidth, normalizedMaxWidht);
  321. }
  322. if (!_.isNil(minColumnWidth)) {
  323. var normalizedMinWidht = minColumnWidth / xDimensionLegenth;
  324. geomWidth = Math.max(geomWidth, normalizedMinWidht);
  325. }
  326. geomWidth = defaultSize ? (defaultSize / xDimensionLegenth) : geomWidth;
  327. // 调整组内间隔
  328. normalizedDodgePadding = ((1 - (groupNum - 1) * normalizedIntervalPadding) / groupNum - len * geomWidth) / (len - 1);
  329. var offset = ((1 / 2 + idx) * geomWidth + idx * normalizedDodgePadding +
  330. (1 / 2) * normalizedIntervalPadding) * groupNum -
  331. normalizedIntervalPadding / 2;
  332. return offset;
  333. };
  334. Dodge.prototype.getDodgeOnlyOffset = function (len, idx) {
  335. 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;
  336. var normalizedDodgePadding = dodgePadding / xDimensionLegenth;
  337. var normalizedIntervalPadding = 1 * marginRatio / (groupNum - 1);
  338. var geomWidth = ((1 - normalizedIntervalPadding * (groupNum - 1)) / groupNum - normalizedDodgePadding * (len - 1)) / len;
  339. // 根据columnWidthRatio/defaultSize/maxColumnWidth/minColumnWidth调整宽度
  340. geomWidth = columnWidthRatio ? 1 / groupNum / len * columnWidthRatio : geomWidth;
  341. if (!_.isNil(maxColumnWidth)) {
  342. var normalizedMaxWidht = maxColumnWidth / xDimensionLegenth;
  343. geomWidth = Math.min(geomWidth, normalizedMaxWidht);
  344. }
  345. if (!_.isNil(minColumnWidth)) {
  346. var normalizedMinWidht = minColumnWidth / xDimensionLegenth;
  347. geomWidth = Math.max(geomWidth, normalizedMinWidht);
  348. }
  349. geomWidth = defaultSize ? (defaultSize / xDimensionLegenth) : geomWidth;
  350. // 调整组间距
  351. normalizedIntervalPadding = (1 - (geomWidth * len + normalizedDodgePadding * (len - 1)) * groupNum) / (groupNum - 1);
  352. var offset = ((1 / 2 + idx) * geomWidth + idx * normalizedDodgePadding +
  353. (1 / 2) * normalizedIntervalPadding) * groupNum -
  354. normalizedIntervalPadding / 2;
  355. return offset;
  356. };
  357. Dodge.prototype.getIntervalAndDodgeOffset = function (len, idx) {
  358. var _a = this, intervalPadding = _a.intervalPadding, dodgePadding = _a.dodgePadding, xDimensionLegenth = _a.xDimensionLegenth, groupNum = _a.groupNum;
  359. var normalizedIntervalPadding = intervalPadding / xDimensionLegenth;
  360. var normalizedDodgePadding = dodgePadding / xDimensionLegenth;
  361. var geomWidth = ((1 - normalizedIntervalPadding * (groupNum - 1)) / groupNum - normalizedDodgePadding * (len - 1)) / len;
  362. var offset = ((1 / 2 + idx) * geomWidth + idx * normalizedDodgePadding +
  363. (1 / 2) * normalizedIntervalPadding) * groupNum -
  364. normalizedIntervalPadding / 2;
  365. return offset;
  366. };
  367. Dodge.prototype.getDistribution = function (dim) {
  368. var groupedDataArray = this.adjustDataArray;
  369. var cacheMap = this.cacheMap;
  370. var map = cacheMap[dim];
  371. if (!map) {
  372. map = {};
  373. _.each(groupedDataArray, function (data, index) {
  374. var values = _.valuesOfKey(data, dim);
  375. if (!values.length) {
  376. values.push(0);
  377. }
  378. _.each(values, function (val) {
  379. if (!map[val]) {
  380. map[val] = [];
  381. }
  382. map[val].push(index);
  383. });
  384. });
  385. cacheMap[dim] = map;
  386. }
  387. return map;
  388. };
  389. return Dodge;
  390. }(adjust_1.default));
  391. exports.default = Dodge;
  392. //# sourceMappingURL=dodge.js.map
  393. }, function(modId) { var map = {"../constant":1679043784141,"./adjust":1679043784140}; return __REQUIRE__(map[modId], modId); })
  394. __DEFINE__(1679043784144, function(require, module, exports) {
  395. Object.defineProperty(exports, "__esModule", { value: true });
  396. var tslib_1 = require("tslib");
  397. var _ = require("@antv/util");
  398. var constant_1 = require("../constant");
  399. var adjust_1 = require("./adjust");
  400. function randomNumber(min, max) {
  401. return (max - min) * Math.random() + min;
  402. }
  403. var Jitter = /** @class */ (function (_super) {
  404. tslib_1.__extends(Jitter, _super);
  405. function Jitter() {
  406. return _super !== null && _super.apply(this, arguments) || this;
  407. }
  408. Jitter.prototype.process = function (groupDataArray) {
  409. var groupedDataArray = _.clone(groupDataArray);
  410. // 之前分组之后的数据,然后有合并回去(和分组前可以理解成是一样的)
  411. var mergeData = _.flatten(groupedDataArray);
  412. // 返回值
  413. this.adjustData(groupedDataArray, mergeData);
  414. return groupedDataArray;
  415. };
  416. /**
  417. * 当前数据分组(index)中,按照维度 dim 进行 jitter 调整
  418. * @param dim
  419. * @param values
  420. * @param dataArray
  421. */
  422. Jitter.prototype.adjustDim = function (dim, values, dataArray) {
  423. var _this = this;
  424. // 在每一个分组中,将数据再按照 dim 分组,用于散列
  425. var groupDataArray = this.groupData(dataArray, dim);
  426. return _.each(groupDataArray, function (data, dimValue) {
  427. return _this.adjustGroup(data, dim, parseFloat(dimValue), values);
  428. });
  429. };
  430. // 随机出来的字段值
  431. Jitter.prototype.getAdjustOffset = function (range) {
  432. var pre = range.pre, next = range.next;
  433. // 随机的范围
  434. var margin = (next - pre) * constant_1.GAP;
  435. return randomNumber(pre + margin, next - margin);
  436. };
  437. // adjust group data
  438. Jitter.prototype.adjustGroup = function (group, dim, dimValue, values) {
  439. var _this = this;
  440. // 调整范围
  441. var range = this.getAdjustRange(dim, dimValue, values);
  442. _.each(group, function (data) {
  443. data[dim] = _this.getAdjustOffset(range); // 获取调整的位置
  444. });
  445. return group;
  446. };
  447. return Jitter;
  448. }(adjust_1.default));
  449. exports.default = Jitter;
  450. //# sourceMappingURL=jitter.js.map
  451. }, function(modId) { var map = {"../constant":1679043784141,"./adjust":1679043784140}; return __REQUIRE__(map[modId], modId); })
  452. __DEFINE__(1679043784145, function(require, module, exports) {
  453. Object.defineProperty(exports, "__esModule", { value: true });
  454. var tslib_1 = require("tslib");
  455. var _ = require("@antv/util");
  456. var adjust_1 = require("./adjust");
  457. var Cache = _.Cache;
  458. var Stack = /** @class */ (function (_super) {
  459. tslib_1.__extends(Stack, _super);
  460. function Stack(cfg) {
  461. var _this = _super.call(this, cfg) || this;
  462. 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;
  463. _this.adjustNames = adjustNames;
  464. _this.height = height;
  465. _this.size = size;
  466. _this.reverseOrder = reverseOrder;
  467. return _this;
  468. }
  469. /**
  470. * 方法入参是经过数据分组、数据数字化之后的二维数组
  471. * @param groupDataArray 分组之后的数据
  472. */
  473. Stack.prototype.process = function (groupDataArray) {
  474. var _a = this, yField = _a.yField, reverseOrder = _a.reverseOrder;
  475. // 如果有指定 y 字段,那么按照 y 字段来 stack
  476. // 否则,按照高度均分
  477. var d = yField ? this.processStack(groupDataArray) : this.processOneDimStack(groupDataArray);
  478. return reverseOrder ? this.reverse(d) : d;
  479. };
  480. Stack.prototype.reverse = function (groupedDataArray) {
  481. return groupedDataArray.slice(0).reverse();
  482. };
  483. Stack.prototype.processStack = function (groupDataArray) {
  484. var _a = this, xField = _a.xField, yField = _a.yField, reverseOrder = _a.reverseOrder;
  485. // 层叠顺序翻转
  486. var groupedDataArray = reverseOrder ? this.reverse(groupDataArray) : groupDataArray;
  487. // 用来缓存,正数和负数的堆叠问题
  488. var positive = new Cache();
  489. var negative = new Cache();
  490. return groupedDataArray.map(function (dataArray) {
  491. return dataArray.map(function (data) {
  492. var _a;
  493. var x = _.get(data, xField, 0);
  494. var y = _.get(data, [yField]);
  495. var xKey = x.toString();
  496. // todo 是否应该取 _origin?因为 y 可能取到的值不正确,比如先 symmetric,再 stack!
  497. y = _.isArray(y) ? y[1] : y;
  498. if (!_.isNil(y)) {
  499. var cache = y >= 0 ? positive : negative;
  500. if (!cache.has(xKey)) {
  501. cache.set(xKey, 0);
  502. }
  503. var xValue = cache.get(xKey);
  504. var newXValue = y + xValue;
  505. // 存起来
  506. cache.set(xKey, newXValue);
  507. return tslib_1.__assign(tslib_1.__assign({}, data), (_a = {}, _a[yField] = [xValue, newXValue], _a));
  508. }
  509. // 没有修改,则直接返回
  510. return data;
  511. });
  512. });
  513. };
  514. Stack.prototype.processOneDimStack = function (groupDataArray) {
  515. var _this = this;
  516. var _a = this, xField = _a.xField, height = _a.height, reverseOrder = _a.reverseOrder;
  517. var yField = 'y';
  518. // 如果层叠的顺序翻转
  519. var groupedDataArray = reverseOrder ? this.reverse(groupDataArray) : groupDataArray;
  520. // 缓存累加数据
  521. var cache = new Cache();
  522. return groupedDataArray.map(function (dataArray) {
  523. return dataArray.map(function (data) {
  524. var _a;
  525. var size = _this.size;
  526. var xValue = data[xField];
  527. // todo 没有看到这个 stack 计算原理
  528. var stackHeight = (size * 2) / height;
  529. if (!cache.has(xValue)) {
  530. cache.set(xValue, stackHeight / 2); // 初始值大小
  531. }
  532. var stackValue = cache.get(xValue);
  533. // 增加一层 stackHeight
  534. cache.set(xValue, stackValue + stackHeight);
  535. return tslib_1.__assign(tslib_1.__assign({}, data), (_a = {}, _a[yField] = stackValue, _a));
  536. });
  537. });
  538. };
  539. return Stack;
  540. }(adjust_1.default));
  541. exports.default = Stack;
  542. //# sourceMappingURL=stack.js.map
  543. }, function(modId) { var map = {"./adjust":1679043784140}; return __REQUIRE__(map[modId], modId); })
  544. __DEFINE__(1679043784146, function(require, module, exports) {
  545. Object.defineProperty(exports, "__esModule", { value: true });
  546. var tslib_1 = require("tslib");
  547. var _ = require("@antv/util");
  548. var adjust_1 = require("./adjust");
  549. var Symmetric = /** @class */ (function (_super) {
  550. tslib_1.__extends(Symmetric, _super);
  551. function Symmetric() {
  552. return _super !== null && _super.apply(this, arguments) || this;
  553. }
  554. Symmetric.prototype.process = function (groupDataArray) {
  555. var mergeData = _.flatten(groupDataArray);
  556. var _a = this, xField = _a.xField, yField = _a.yField;
  557. // 每个 x 值对应的 最大值
  558. var cache = this.getXValuesMaxMap(mergeData);
  559. // 所有数据的最大的值
  560. var max = Math.max.apply(Math, Object.keys(cache).map(function (key) { return cache[key]; }));
  561. return _.map(groupDataArray, function (dataArray) {
  562. return _.map(dataArray, function (data) {
  563. var _a, _b;
  564. var yValue = data[yField];
  565. var xValue = data[xField];
  566. // 数组处理逻辑
  567. if (_.isArray(yValue)) {
  568. var off_1 = (max - cache[xValue]) / 2;
  569. return tslib_1.__assign(tslib_1.__assign({}, data), (_a = {}, _a[yField] = _.map(yValue, function (y) { return off_1 + y; }), _a));
  570. }
  571. // 非数组处理逻辑
  572. var offset = (max - yValue) / 2;
  573. return tslib_1.__assign(tslib_1.__assign({}, data), (_b = {}, _b[yField] = [offset, yValue + offset], _b));
  574. });
  575. });
  576. };
  577. // 获取每个 x 对应的最大的值
  578. Symmetric.prototype.getXValuesMaxMap = function (mergeData) {
  579. var _this = this;
  580. var _a = this, xField = _a.xField, yField = _a.yField;
  581. // 根据 xField 的值进行分组
  582. var groupDataArray = _.groupBy(mergeData, function (data) { return data[xField]; });
  583. // 获取每个 xField 值中的最大值
  584. return _.mapValues(groupDataArray, function (dataArray) { return _this.getDimMaxValue(dataArray, yField); });
  585. };
  586. Symmetric.prototype.getDimMaxValue = function (mergeData, dim) {
  587. // 所有的 value 值
  588. var dimValues = _.map(mergeData, function (data) { return _.get(data, dim, []); });
  589. // 将数组打平(dim value 有可能是数组,比如 stack 之后的)
  590. var flattenValues = _.flatten(dimValues);
  591. // 求出数组的最大值
  592. return Math.max.apply(Math, flattenValues);
  593. };
  594. return Symmetric;
  595. }(adjust_1.default));
  596. exports.default = Symmetric;
  597. //# sourceMappingURL=symmetric.js.map
  598. }, function(modId) { var map = {"./adjust":1679043784140}; return __REQUIRE__(map[modId], modId); })
  599. return __REQUIRE__(1679043784138);
  600. })()
  601. //miniprogram-npm-outsideDeps=["tslib","@antv/util"]
  602. //# sourceMappingURL=index.js.map