1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- const Adjust = require('./base');
- const each = require('@antv/util/lib/each');
- const MARGIN_RATIO = 1 / 2;
- const DODGE_RATIO = 1 / 2;
- class Dodge extends Adjust {
- _initDefaultCfg() {
- /**
- * 调整过程中,2个数据的间距
- * @type {Number}
- */
- this.marginRatio = MARGIN_RATIO;
- /**
- * 调整占单位宽度的比例,例如:占2个分类间距的 1/2
- * @type {Number}
- */
- this.dodgeRatio = DODGE_RATIO;
- this.adjustNames = [ 'x', 'y' ]; // 调整的维度,默认,x,y都做调整
- }
- getDodgeOffset(range, index, count) {
- const self = this;
- const pre = range.pre;
- const next = range.next;
- const tickLength = next - pre;
- const width = (tickLength * self.dodgeRatio) / count;
- const margin = self.marginRatio * width;
- const offset = 1 / 2 * (tickLength - (count) * width - (count - 1) * margin) +
- ((index + 1) * width + index * margin) -
- 1 / 2 * width - 1 / 2 * tickLength;
- return (pre + next) / 2 + offset;
- }
- processAdjust(dataArray) {
- const self = this;
- const count = dataArray.length;
- const xField = self.xField;
- each(dataArray, function(data, index) {
- for (let i = 0, len = data.length; i < len; i++) {
- const obj = data[i];
- const value = obj[xField];
- const range = {
- pre: len === 1 ? value - 1 : value - 0.5,
- next: len === 1 ? value + 1 : value + 0.5
- };
- const dodgeValue = self.getDodgeOffset(range, index, count);
- obj[xField] = dodgeValue;
- }
- });
- }
- }
- Adjust.Dodge = Dodge;
- module.exports = Dodge;
|