stack.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. module.exports = {
  2. _initDefaultCfg: function _initDefaultCfg() {
  3. this.xField = null; // 调整对应的 x 方向对应的字段名称
  4. this.yField = null; // 调整对应的 y 方向对应的字段名称
  5. this.height = null; // 仅有一个维度调整时,总的高度
  6. this.size = 10; // 单个点的大小
  7. this.reverseOrder = false; // 是否反序进行层叠
  8. this.adjustNames = ['y']; // Only support stack y
  9. },
  10. processOneDimStack: function processOneDimStack(dataArray) {
  11. var self = this;
  12. var xField = self.xField;
  13. var yField = self.yField || 'y';
  14. var height = self.height;
  15. var stackY = {}; // 如果层叠的顺序翻转
  16. if (self.reverseOrder) {
  17. dataArray = dataArray.slice(0).reverse();
  18. }
  19. for (var i = 0, len = dataArray.length; i < len; i++) {
  20. var data = dataArray[i]; // cates
  21. for (var j = 0, dataLen = data.length; j < dataLen; j++) {
  22. var item = data[j];
  23. var size = item.size || self.size;
  24. var stackHeight = size * 2 / height;
  25. var x = item[xField];
  26. if (!stackY[x]) {
  27. stackY[x] = stackHeight / 2;
  28. }
  29. item[yField] = stackY[x];
  30. stackY[x] += stackHeight;
  31. }
  32. }
  33. },
  34. processAdjust: function processAdjust(dataArray) {
  35. if (this.yField) {
  36. this.processStack(dataArray);
  37. } else {
  38. this.processOneDimStack(dataArray);
  39. }
  40. }
  41. };