dodge.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
  2. var Adjust = require('./base');
  3. var each = require('@antv/util/lib/each');
  4. var MARGIN_RATIO = 1 / 2;
  5. var DODGE_RATIO = 1 / 2;
  6. var Dodge =
  7. /*#__PURE__*/
  8. function (_Adjust) {
  9. _inheritsLoose(Dodge, _Adjust);
  10. function Dodge() {
  11. return _Adjust.apply(this, arguments) || this;
  12. }
  13. var _proto = Dodge.prototype;
  14. _proto._initDefaultCfg = function _initDefaultCfg() {
  15. /**
  16. * 调整过程中,2个数据的间距
  17. * @type {Number}
  18. */
  19. this.marginRatio = MARGIN_RATIO;
  20. /**
  21. * 调整占单位宽度的比例,例如:占2个分类间距的 1/2
  22. * @type {Number}
  23. */
  24. this.dodgeRatio = DODGE_RATIO;
  25. this.adjustNames = ['x', 'y']; // 调整的维度,默认,x,y都做调整
  26. };
  27. _proto.getDodgeOffset = function getDodgeOffset(range, index, count) {
  28. var self = this;
  29. var pre = range.pre;
  30. var next = range.next;
  31. var tickLength = next - pre;
  32. var width = tickLength * self.dodgeRatio / count;
  33. var margin = self.marginRatio * width;
  34. var offset = 1 / 2 * (tickLength - count * width - (count - 1) * margin) + ((index + 1) * width + index * margin) - 1 / 2 * width - 1 / 2 * tickLength;
  35. return (pre + next) / 2 + offset;
  36. };
  37. _proto.processAdjust = function processAdjust(dataArray) {
  38. var self = this;
  39. var count = dataArray.length;
  40. var xField = self.xField;
  41. each(dataArray, function (data, index) {
  42. for (var i = 0, len = data.length; i < len; i++) {
  43. var obj = data[i];
  44. var value = obj[xField];
  45. var range = {
  46. pre: len === 1 ? value - 1 : value - 0.5,
  47. next: len === 1 ? value + 1 : value + 0.5
  48. };
  49. var dodgeValue = self.getDodgeOffset(range, index, count);
  50. obj[xField] = dodgeValue;
  51. }
  52. });
  53. };
  54. return Dodge;
  55. }(Adjust);
  56. Adjust.Dodge = Dodge;
  57. module.exports = Dodge;