@easyv/charts 1.6.2 → 1.6.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/hooks/useAxes.js +41 -13
- package/lib/hooks/useExtentData.js +19 -4
- package/package.json +1 -1
- package/src/hooks/useAxes.js +93 -40
- package/src/hooks/useExtentData.js +52 -16
package/lib/hooks/useAxes.js
CHANGED
|
@@ -7,6 +7,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports["default"] = void 0;
|
|
9
9
|
|
|
10
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
11
|
+
|
|
10
12
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
13
|
|
|
12
14
|
var _react = require("react");
|
|
@@ -36,16 +38,36 @@ var getCount = function getCount(num) {
|
|
|
36
38
|
|
|
37
39
|
var getNewDomain = function getNewDomain(domain, mode, step) {
|
|
38
40
|
var extent = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
|
41
|
+
var numericalRangeModel = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : "value";
|
|
42
|
+
var percentageExtent = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {
|
|
43
|
+
max: 100,
|
|
44
|
+
min: 100
|
|
45
|
+
};
|
|
39
46
|
var _extent$min = extent.min,
|
|
40
|
-
|
|
47
|
+
defaultBottom = _extent$min === void 0 ? "" : _extent$min,
|
|
41
48
|
_extent$max = extent.max,
|
|
42
|
-
|
|
49
|
+
defaultTop = _extent$max === void 0 ? "" : _extent$max;
|
|
50
|
+
var _percentageExtent$min = percentageExtent.min,
|
|
51
|
+
defaultPercentageMin = _percentageExtent$min === void 0 ? 100 : _percentageExtent$min,
|
|
52
|
+
_percentageExtent$max = percentageExtent.max,
|
|
53
|
+
defaultPercentageMax = _percentageExtent$max === void 0 ? 100 : _percentageExtent$max;
|
|
54
|
+
var bottom = defaultBottom,
|
|
55
|
+
top = defaultTop;
|
|
43
56
|
var newDomain = []; //能进入这个函数,说明extent中min和max至少有一个是缺失的,如果max存在,意味着纵轴上限被固定
|
|
44
57
|
|
|
45
58
|
var min = domain[0],
|
|
46
59
|
max = domain[1];
|
|
47
60
|
var minCount = Math.pow(10, getCount(min)),
|
|
48
|
-
maxCount = Math.pow(10, getCount(max));
|
|
61
|
+
maxCount = Math.pow(10, getCount(max)); //轴标签,范围模式,百分比模式
|
|
62
|
+
|
|
63
|
+
if (numericalRangeModel == "percentage") {
|
|
64
|
+
var _max = defaultPercentageMax === "" ? 100 : defaultPercentageMax;
|
|
65
|
+
|
|
66
|
+
var _min = defaultPercentageMin === "" ? 100 : defaultPercentageMin;
|
|
67
|
+
|
|
68
|
+
bottom = min * _min / 100;
|
|
69
|
+
top = max * _max / 100;
|
|
70
|
+
}
|
|
49
71
|
|
|
50
72
|
switch (mode) {
|
|
51
73
|
case "count":
|
|
@@ -54,7 +76,7 @@ var getNewDomain = function getNewDomain(domain, mode, step) {
|
|
|
54
76
|
break;
|
|
55
77
|
|
|
56
78
|
case "step":
|
|
57
|
-
if (
|
|
79
|
+
if (defaultTop != "") {
|
|
58
80
|
newDomain = [domain[1], domain[1]];
|
|
59
81
|
|
|
60
82
|
while (newDomain[0] > domain[0]) {
|
|
@@ -114,10 +136,14 @@ var _default = function _default(_ref) {
|
|
|
114
136
|
|
|
115
137
|
var _axes = (0, _react.useMemo)(function () {
|
|
116
138
|
var tmp = new Map();
|
|
117
|
-
var xAxisPositions =
|
|
139
|
+
var xAxisPositions = new Set(); //用Set去重,去掉重复的x轴
|
|
140
|
+
|
|
118
141
|
axes.forEach(function (item) {
|
|
119
142
|
var _item$config$label = item.config.label,
|
|
120
143
|
extent = _item$config$label.extent,
|
|
144
|
+
percentageExtent = _item$config$label.percentageExtent,
|
|
145
|
+
_item$config$label$nu = _item$config$label.numericalRangeModel,
|
|
146
|
+
numericalRangeModel = _item$config$label$nu === void 0 ? "value" : _item$config$label$nu,
|
|
121
147
|
_item$config$label$sh = _item$config$label.showLast,
|
|
122
148
|
showLast = _item$config$label$sh === void 0 ? false : _item$config$label$sh,
|
|
123
149
|
_item$config$label$de = _item$config$label.decimal,
|
|
@@ -176,7 +202,7 @@ var _default = function _default(_ref) {
|
|
|
176
202
|
* @param {*} scales
|
|
177
203
|
* @param {*} type 轴类型
|
|
178
204
|
* @param {*} domain 数据的范围
|
|
179
|
-
* @param {*}
|
|
205
|
+
* @param {*} 屏幕坐标的范围
|
|
180
206
|
* @returns
|
|
181
207
|
*/
|
|
182
208
|
|
|
@@ -339,7 +365,7 @@ var _default = function _default(_ref) {
|
|
|
339
365
|
var fixedDomain = extent && extent.min != "" && extent.max != ""; //判断配置项中是否强制了最大最小值,如果已经被强制了,就不计算newDomain
|
|
340
366
|
|
|
341
367
|
if (type !== "ordinal" && !isNaN(domain[1]) && !auto && !fixedDomain) {
|
|
342
|
-
newDomain = getNewDomain(domain, mode, _step, extent);
|
|
368
|
+
newDomain = getNewDomain(domain, mode, _step, extent, numericalRangeModel, percentageExtent);
|
|
343
369
|
}
|
|
344
370
|
|
|
345
371
|
var scaler = scales[type]().domain(newDomain).range(range);
|
|
@@ -373,17 +399,17 @@ var _default = function _default(_ref) {
|
|
|
373
399
|
if (type == "linear" && config.on) {
|
|
374
400
|
var zeroPosition = scaler(0);
|
|
375
401
|
|
|
376
|
-
if (
|
|
402
|
+
if (!isNaN(zeroPosition)) {
|
|
377
403
|
if (_direction === "horizontal") {
|
|
378
|
-
xAxisPositions.
|
|
404
|
+
xAxisPositions.add(JSON.stringify({
|
|
379
405
|
x: zeroPosition,
|
|
380
406
|
y: 0
|
|
381
|
-
});
|
|
407
|
+
}));
|
|
382
408
|
} else if (_direction === "vertical") {
|
|
383
|
-
xAxisPositions.
|
|
409
|
+
xAxisPositions.add(JSON.stringify({
|
|
384
410
|
x: 0,
|
|
385
411
|
y: zeroPosition
|
|
386
|
-
});
|
|
412
|
+
}));
|
|
387
413
|
}
|
|
388
414
|
}
|
|
389
415
|
}
|
|
@@ -433,7 +459,9 @@ var _default = function _default(_ref) {
|
|
|
433
459
|
}));
|
|
434
460
|
}
|
|
435
461
|
});
|
|
436
|
-
tmp.get("x") && (tmp.get("x").positions = xAxisPositions)
|
|
462
|
+
tmp.get("x") && (tmp.get("x").positions = (0, _toConsumableArray2["default"])(xAxisPositions).map(function (d) {
|
|
463
|
+
return JSON.parse(d);
|
|
464
|
+
}));
|
|
437
465
|
return tmp;
|
|
438
466
|
}, [axes, controlInfo]);
|
|
439
467
|
|
|
@@ -122,13 +122,17 @@ var _default = function _default(_ref) {
|
|
|
122
122
|
// return d[1].sort((a,b)=>a.x>b.x?1:-1)
|
|
123
123
|
// });
|
|
124
124
|
}
|
|
125
|
-
} //
|
|
125
|
+
} // console.log("nononon", axes);
|
|
126
|
+
//clipAxisMode如果是auto根据clipDifferenceValue设置clipValue
|
|
126
127
|
|
|
127
128
|
|
|
128
129
|
return axes.map(function (item) {
|
|
129
130
|
var axisType = item.axisType,
|
|
130
131
|
domain = item.domain,
|
|
131
|
-
type = item.type
|
|
132
|
+
type = item.type,
|
|
133
|
+
_item$config$label = item.config.label,
|
|
134
|
+
percentageExtent = _item$config$label.percentageExtent,
|
|
135
|
+
numericalRangeModel = _item$config$label.numericalRangeModel;
|
|
132
136
|
|
|
133
137
|
switch (axisType) {
|
|
134
138
|
case "x":
|
|
@@ -171,13 +175,13 @@ var _default = function _default(_ref) {
|
|
|
171
175
|
}
|
|
172
176
|
|
|
173
177
|
return _objectSpread(_objectSpread({}, item), {}, {
|
|
174
|
-
domain: domain ? getDomain(y, domain) : y
|
|
178
|
+
domain: domain ? getDomain(y, domain, numericalRangeModel, percentageExtent) : y
|
|
175
179
|
});
|
|
176
180
|
}
|
|
177
181
|
|
|
178
182
|
case "z":
|
|
179
183
|
return _objectSpread(_objectSpread({}, item), {}, {
|
|
180
|
-
domain: domain ? getDomain(z, domain) : z
|
|
184
|
+
domain: domain ? getDomain(z, domain, numericalRangeModel, percentageExtent) : z
|
|
181
185
|
});
|
|
182
186
|
}
|
|
183
187
|
});
|
|
@@ -192,5 +196,16 @@ var getDomain = function getDomain(_ref2, _ref3) {
|
|
|
192
196
|
|
|
193
197
|
var min = _ref3.min,
|
|
194
198
|
max = _ref3.max;
|
|
199
|
+
var numericalRangeModel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "value";
|
|
200
|
+
var percentageExtent = arguments.length > 3 ? arguments[3] : undefined;
|
|
201
|
+
|
|
202
|
+
if (numericalRangeModel == "percentage" && percentageExtent) {
|
|
203
|
+
var _min = percentageExtent.min == "" ? 100 : +percentageExtent.min;
|
|
204
|
+
|
|
205
|
+
var _max = percentageExtent.max == "" ? 100 : +percentageExtent.max;
|
|
206
|
+
|
|
207
|
+
return [min1 * _min / 100, max1 * _max / 100];
|
|
208
|
+
}
|
|
209
|
+
|
|
195
210
|
return [min !== "" ? +min : min1, max !== "" ? +max : max1];
|
|
196
211
|
};
|
package/package.json
CHANGED
package/src/hooks/useAxes.js
CHANGED
|
@@ -14,26 +14,49 @@ const getCount = (num) => {
|
|
|
14
14
|
return i;
|
|
15
15
|
};
|
|
16
16
|
|
|
17
|
-
const getNewDomain = (
|
|
18
|
-
|
|
17
|
+
const getNewDomain = (
|
|
18
|
+
domain,
|
|
19
|
+
mode,
|
|
20
|
+
step,
|
|
21
|
+
extent = {},
|
|
22
|
+
numericalRangeModel = "value",
|
|
23
|
+
percentageExtent = { max: 100, min: 100 }
|
|
24
|
+
) => {
|
|
25
|
+
let { min: defaultBottom = "", max: defaultTop = "" } = extent;
|
|
26
|
+
const { min: defaultPercentageMin = 100, max: defaultPercentageMax = 100 } =
|
|
27
|
+
percentageExtent;
|
|
28
|
+
let bottom = defaultBottom,
|
|
29
|
+
top = defaultTop;
|
|
30
|
+
|
|
19
31
|
let newDomain = [];
|
|
20
32
|
//能进入这个函数,说明extent中min和max至少有一个是缺失的,如果max存在,意味着纵轴上限被固定
|
|
21
33
|
let min = domain[0],
|
|
22
34
|
max = domain[1];
|
|
23
35
|
let minCount = Math.pow(10, getCount(min)),
|
|
24
36
|
maxCount = Math.pow(10, getCount(max));
|
|
37
|
+
|
|
38
|
+
//轴标签,范围模式,百分比模式
|
|
39
|
+
if (numericalRangeModel == "percentage") {
|
|
40
|
+
let _max = defaultPercentageMax === "" ? 100 : defaultPercentageMax;
|
|
41
|
+
let _min = defaultPercentageMin === "" ? 100 : defaultPercentageMin;
|
|
42
|
+
bottom = (min * _min) / 100;
|
|
43
|
+
top = (max * _max) / 100;
|
|
44
|
+
}
|
|
45
|
+
|
|
25
46
|
switch (mode) {
|
|
26
47
|
case "count":
|
|
27
|
-
newDomain[0] =
|
|
28
|
-
|
|
48
|
+
newDomain[0] =
|
|
49
|
+
bottom != "" ? bottom : Math.floor(domain[0] / minCount) * minCount;
|
|
50
|
+
newDomain[1] =
|
|
51
|
+
top != "" ? top : Math.ceil(domain[1] / maxCount) * maxCount;
|
|
29
52
|
break;
|
|
30
53
|
case "step":
|
|
31
|
-
if(
|
|
54
|
+
if (defaultTop != "") {
|
|
32
55
|
newDomain = [domain[1], domain[1]];
|
|
33
56
|
while (newDomain[0] > domain[0]) {
|
|
34
57
|
newDomain[0] -= step;
|
|
35
58
|
}
|
|
36
|
-
}else{
|
|
59
|
+
} else {
|
|
37
60
|
newDomain = [domain[0], domain[0]];
|
|
38
61
|
while (newDomain[1] < domain[1]) {
|
|
39
62
|
newDomain[1] += step;
|
|
@@ -70,19 +93,26 @@ const scales = {
|
|
|
70
93
|
|
|
71
94
|
export default ({
|
|
72
95
|
axes,
|
|
73
|
-
context: { width:chartWidth, height:chartHeight },
|
|
74
|
-
controlInfo,
|
|
96
|
+
context: { width: chartWidth, height: chartHeight },
|
|
97
|
+
controlInfo, //是否为控制图
|
|
75
98
|
}) => {
|
|
76
99
|
const { isC, cHeight, cWidth, cPercent } = controlInfo;
|
|
77
100
|
const width = chartWidth;
|
|
78
101
|
const height = chartHeight - cHeight;
|
|
102
|
+
|
|
79
103
|
const _axes = useMemo(() => {
|
|
80
104
|
const tmp = new Map();
|
|
81
|
-
const xAxisPositions =
|
|
105
|
+
const xAxisPositions = new Set(); //用Set去重,去掉重复的x轴
|
|
82
106
|
axes.forEach((item) => {
|
|
83
107
|
const {
|
|
84
108
|
config: {
|
|
85
|
-
label: {
|
|
109
|
+
label: {
|
|
110
|
+
extent,
|
|
111
|
+
percentageExtent,
|
|
112
|
+
numericalRangeModel = "value",
|
|
113
|
+
showLast = false,
|
|
114
|
+
decimal = 0,
|
|
115
|
+
},
|
|
86
116
|
},
|
|
87
117
|
type,
|
|
88
118
|
orientation,
|
|
@@ -104,7 +134,7 @@ export default ({
|
|
|
104
134
|
bottomClipAxisStep,
|
|
105
135
|
topClipAxisStep,
|
|
106
136
|
clipValue,
|
|
107
|
-
clipPosition
|
|
137
|
+
clipPosition,
|
|
108
138
|
} = item;
|
|
109
139
|
//如果是断轴类型,输出一套完全不同的values
|
|
110
140
|
/**
|
|
@@ -146,7 +176,7 @@ export default ({
|
|
|
146
176
|
* @param {*} scales
|
|
147
177
|
* @param {*} type 轴类型
|
|
148
178
|
* @param {*} domain 数据的范围
|
|
149
|
-
* @param {*}
|
|
179
|
+
* @param {*} 屏幕坐标的范围
|
|
150
180
|
* @returns
|
|
151
181
|
*/
|
|
152
182
|
function setScaler(scales, type, domain, range) {
|
|
@@ -209,7 +239,10 @@ export default ({
|
|
|
209
239
|
break;
|
|
210
240
|
case "step":
|
|
211
241
|
let newStep = +step;
|
|
212
|
-
newStep =
|
|
242
|
+
newStep =
|
|
243
|
+
(newDomain[1] - newDomain[0]) / newStep > 30
|
|
244
|
+
? Math.ceil((newDomain[1] - newDomain[0]) / 30)
|
|
245
|
+
: newStep;
|
|
213
246
|
_ticks = getYTicksByStep(newDomain[1], newDomain[0], newStep);
|
|
214
247
|
break;
|
|
215
248
|
}
|
|
@@ -333,32 +366,40 @@ export default ({
|
|
|
333
366
|
});
|
|
334
367
|
} else {
|
|
335
368
|
//计算真正需要的tickCount,如果domain区间太小,不能完全按照count来,需要减少count数
|
|
336
|
-
const tickCount =
|
|
337
|
-
|
|
369
|
+
const tickCount =
|
|
370
|
+
type == "ordinal" ? _count : getTickCount(domain, _count, decimal);
|
|
371
|
+
const { start, end, direction, _paddingOuter, length } =
|
|
372
|
+
getChartsConfig(orientation, width, height, paddingOuter);
|
|
338
373
|
let range =
|
|
339
374
|
direction === "horizontal"
|
|
340
375
|
? [start, end]
|
|
341
376
|
: direction === "vertical"
|
|
342
377
|
? [end, start]
|
|
343
378
|
: [0, 0];
|
|
344
|
-
if(reverse)range = [range[1],range[0]];
|
|
379
|
+
if (reverse) range = [range[1], range[0]];
|
|
345
380
|
let newDomain = domain;
|
|
346
|
-
const fixedDomain = extent && extent.min!="" && extent.max!="";
|
|
381
|
+
const fixedDomain = extent && extent.min != "" && extent.max != ""; //判断配置项中是否强制了最大最小值,如果已经被强制了,就不计算newDomain
|
|
347
382
|
if (type !== "ordinal" && !isNaN(domain[1]) && !auto && !fixedDomain) {
|
|
348
|
-
newDomain = getNewDomain(
|
|
383
|
+
newDomain = getNewDomain(
|
|
384
|
+
domain,
|
|
385
|
+
mode,
|
|
386
|
+
_step,
|
|
387
|
+
extent,
|
|
388
|
+
numericalRangeModel,
|
|
389
|
+
percentageExtent
|
|
390
|
+
);
|
|
349
391
|
}
|
|
350
392
|
let scaler = scales[type]().domain(newDomain).range(range);
|
|
351
|
-
|
|
352
393
|
scaler.type = type;
|
|
353
394
|
if (type !== "ordinal") scaler.clamp(true);
|
|
354
|
-
|
|
395
|
+
|
|
355
396
|
const allTicks = ticks
|
|
356
397
|
? ticks
|
|
357
398
|
: scaler.ticks
|
|
358
399
|
? scaler.ticks(tickCount)
|
|
359
400
|
: scaler.domain();
|
|
360
401
|
let _ticks = allTicks;
|
|
361
|
-
|
|
402
|
+
|
|
362
403
|
if (type === "ordinal") {
|
|
363
404
|
if (carousel === false || isC) {
|
|
364
405
|
_ticks = getTicksOfAxis(_ticks, +tickCount, showLast);
|
|
@@ -371,7 +412,10 @@ export default ({
|
|
|
371
412
|
break;
|
|
372
413
|
case "step":
|
|
373
414
|
let newStep = +_step;
|
|
374
|
-
newStep =
|
|
415
|
+
newStep =
|
|
416
|
+
(newDomain[1] - newDomain[0]) / newStep > 30
|
|
417
|
+
? Math.ceil((newDomain[1] - newDomain[0]) / 30)
|
|
418
|
+
: newStep;
|
|
375
419
|
_ticks = getYTicksByStep(newDomain[1], newDomain[0], newStep);
|
|
376
420
|
break;
|
|
377
421
|
}
|
|
@@ -380,38 +424,47 @@ export default ({
|
|
|
380
424
|
const lengthWithoutPaddingOuter = length - _paddingOuter;
|
|
381
425
|
if (type == "linear" && config.on) {
|
|
382
426
|
const zeroPosition = scaler(0);
|
|
383
|
-
if (
|
|
427
|
+
if (!isNaN(zeroPosition)) {
|
|
384
428
|
if (direction === "horizontal") {
|
|
385
|
-
xAxisPositions.
|
|
429
|
+
xAxisPositions.add(JSON.stringify({
|
|
386
430
|
x: zeroPosition,
|
|
387
431
|
y: 0,
|
|
388
|
-
});
|
|
432
|
+
}));
|
|
389
433
|
} else if (direction === "vertical") {
|
|
390
|
-
xAxisPositions.
|
|
434
|
+
xAxisPositions.add(JSON.stringify({
|
|
391
435
|
x: 0,
|
|
392
436
|
y: zeroPosition,
|
|
393
|
-
});
|
|
437
|
+
}));
|
|
394
438
|
}
|
|
395
439
|
}
|
|
396
440
|
}
|
|
397
441
|
let step = lengthWithoutPaddingOuter / allTicks.length;
|
|
398
442
|
const controlCfg = {
|
|
399
|
-
controlStep:0,
|
|
400
|
-
controlDragScaler:null
|
|
401
|
-
}
|
|
402
|
-
if(isC){
|
|
443
|
+
controlStep: 0,
|
|
444
|
+
controlDragScaler: null,
|
|
445
|
+
};
|
|
446
|
+
if (isC) {
|
|
403
447
|
controlCfg.controlStep = step / cPercent;
|
|
404
|
-
controlCfg.controlDragScaler = scaler
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
:
|
|
409
|
-
|
|
410
|
-
:
|
|
448
|
+
controlCfg.controlDragScaler = scaler
|
|
449
|
+
.copy()
|
|
450
|
+
.range([start / cPercent, end / cPercent]);
|
|
451
|
+
const {
|
|
452
|
+
start: start_,
|
|
453
|
+
end: end_,
|
|
454
|
+
direction: direction_,
|
|
455
|
+
_paddingOuter: outer,
|
|
456
|
+
length: len,
|
|
457
|
+
} = getChartsConfig(orientation, cWidth, height, paddingOuter);
|
|
458
|
+
let range =
|
|
459
|
+
direction_ === "horizontal"
|
|
460
|
+
? [start_, end_]
|
|
461
|
+
: direction_ === "vertical"
|
|
462
|
+
? [end_, start_]
|
|
463
|
+
: [0, 0];
|
|
411
464
|
scaler = scales[type]().domain(newDomain).range(range);
|
|
412
465
|
scaler.type = type;
|
|
413
466
|
const controlOuter = len - outer;
|
|
414
|
-
step = controlOuter/allTicks.length;
|
|
467
|
+
step = controlOuter / allTicks.length;
|
|
415
468
|
}
|
|
416
469
|
tmp.set(axisType, {
|
|
417
470
|
...item,
|
|
@@ -433,7 +486,7 @@ export default ({
|
|
|
433
486
|
});
|
|
434
487
|
}
|
|
435
488
|
});
|
|
436
|
-
tmp.get("x") && (tmp.get("x").positions = xAxisPositions);
|
|
489
|
+
tmp.get("x") && (tmp.get("x").positions = [...xAxisPositions].map(d=>JSON.parse(d)));
|
|
437
490
|
return tmp;
|
|
438
491
|
}, [axes, controlInfo]);
|
|
439
492
|
return _axes;
|
|
@@ -10,13 +10,17 @@ import {
|
|
|
10
10
|
|
|
11
11
|
//扩张系数,用于扩大数据的最大最小值范围,达到图表尽量居中显示的效果
|
|
12
12
|
const extentRatio = 0;
|
|
13
|
-
const extentRange = (value, type)=>{
|
|
14
|
-
if(value>=0){
|
|
15
|
-
return type=="min"
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
const extentRange = (value, type) => {
|
|
14
|
+
if (value >= 0) {
|
|
15
|
+
return type == "min"
|
|
16
|
+
? value * (1 - extentRatio)
|
|
17
|
+
: value * (1 + extentRatio);
|
|
18
|
+
} else {
|
|
19
|
+
return type == "min"
|
|
20
|
+
? value * (1 + extentRatio)
|
|
21
|
+
: value * (1 - extentRatio);
|
|
18
22
|
}
|
|
19
|
-
}
|
|
23
|
+
};
|
|
20
24
|
const stackData = (data, series) => {
|
|
21
25
|
const dataMap = group(data, (d) => d.x);
|
|
22
26
|
const stacks = getStacks(series);
|
|
@@ -48,7 +52,10 @@ const stackData = (data, series) => {
|
|
|
48
52
|
max = Math.max(...arr, max);
|
|
49
53
|
});
|
|
50
54
|
dataMap.clear();
|
|
51
|
-
return [
|
|
55
|
+
return [
|
|
56
|
+
extentRange(min || 0, "min"),
|
|
57
|
+
extentRange(max == undefined ? (min || 0) + 100 : max, "max"),
|
|
58
|
+
];
|
|
52
59
|
};
|
|
53
60
|
|
|
54
61
|
/**
|
|
@@ -68,20 +75,35 @@ export default ({ axes, series, data }) => {
|
|
|
68
75
|
const x = useMemo(() => [...group(data, (d) => d.x).keys()], [data]);
|
|
69
76
|
const y = stackData(dataY, _series.y);
|
|
70
77
|
const z = stackData(dataZ, _series.z);
|
|
71
|
-
const xAxis = axes.find(d=>d.axisType=="x");
|
|
72
|
-
if(xAxis){
|
|
73
|
-
const {
|
|
74
|
-
|
|
75
|
-
|
|
78
|
+
const xAxis = axes.find((d) => d.axisType == "x");
|
|
79
|
+
if (xAxis) {
|
|
80
|
+
const {
|
|
81
|
+
config: {
|
|
82
|
+
label: {
|
|
83
|
+
autoSort,
|
|
84
|
+
format: { type },
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
} = xAxis;
|
|
88
|
+
if (type == "date" && autoSort) {
|
|
89
|
+
x.sort((a, b) => (a > b ? 1 : -1));
|
|
76
90
|
// const groupBySeries = group(data, (d) => d.s);
|
|
77
91
|
// data=[...groupBySeries].flatMap(d=>{
|
|
78
92
|
// return d[1].sort((a,b)=>a.x>b.x?1:-1)
|
|
79
93
|
// });
|
|
80
94
|
}
|
|
81
95
|
}
|
|
96
|
+
// console.log("nononon", axes);
|
|
82
97
|
//clipAxisMode如果是auto根据clipDifferenceValue设置clipValue
|
|
83
98
|
return axes.map((item) => {
|
|
84
|
-
const {
|
|
99
|
+
const {
|
|
100
|
+
axisType,
|
|
101
|
+
domain,
|
|
102
|
+
type,
|
|
103
|
+
config: {
|
|
104
|
+
label: { percentageExtent, numericalRangeModel },
|
|
105
|
+
},
|
|
106
|
+
} = item;
|
|
85
107
|
switch (axisType) {
|
|
86
108
|
case "x":
|
|
87
109
|
return {
|
|
@@ -116,19 +138,33 @@ export default ({ axes, series, data }) => {
|
|
|
116
138
|
}
|
|
117
139
|
return {
|
|
118
140
|
...item,
|
|
119
|
-
domain: domain
|
|
141
|
+
domain: domain
|
|
142
|
+
? getDomain(y, domain, numericalRangeModel, percentageExtent)
|
|
143
|
+
: y,
|
|
120
144
|
};
|
|
121
145
|
}
|
|
122
146
|
|
|
123
147
|
case "z":
|
|
124
148
|
return {
|
|
125
149
|
...item,
|
|
126
|
-
domain: domain
|
|
150
|
+
domain: domain
|
|
151
|
+
? getDomain(z, domain, numericalRangeModel, percentageExtent)
|
|
152
|
+
: z,
|
|
127
153
|
};
|
|
128
154
|
}
|
|
129
155
|
});
|
|
130
156
|
};
|
|
131
157
|
|
|
132
|
-
const getDomain = (
|
|
158
|
+
const getDomain = (
|
|
159
|
+
[min1, max1],
|
|
160
|
+
{ min, max },
|
|
161
|
+
numericalRangeModel = "value",
|
|
162
|
+
percentageExtent
|
|
163
|
+
) => {
|
|
164
|
+
if (numericalRangeModel == "percentage" && percentageExtent) {
|
|
165
|
+
const _min = percentageExtent.min == "" ? 100 : +percentageExtent.min;
|
|
166
|
+
const _max = percentageExtent.max == "" ? 100 : +percentageExtent.max;
|
|
167
|
+
return [(min1 * _min) / 100, (max1 * _max) / 100];
|
|
168
|
+
}
|
|
133
169
|
return [min !== "" ? +min : min1, max !== "" ? +max : max1];
|
|
134
170
|
};
|