UNPKG

1.66 kBJavaScriptView Raw
1/**
2 * 计算几分位 https://github.com/simple-statistics/simple-statistics/blob/master/src/quantile_sorted.js
3 * @param x 数组
4 * @param p 百分比
5 */
6function quantileSorted(x, p) {
7 var idx = x.length * p;
8 /*if (x.length === 0) { // 当前场景这些条件不可能命中
9 throw new Error('quantile requires at least one value.');
10 } else if (p < 0 || p > 1) {
11 throw new Error('quantiles must be between 0 and 1');
12 } else */
13 if (p === 1) {
14 // If p is 1, directly return the last element
15 return x[x.length - 1];
16 }
17 else if (p === 0) {
18 // If p is 0, directly return the first element
19 return x[0];
20 }
21 else if (idx % 1 !== 0) {
22 // If p is not integer, return the next element in array
23 return x[Math.ceil(idx) - 1];
24 }
25 else if (x.length % 2 === 0) {
26 // If the list has even-length, we'll take the average of this number
27 // and the next value, if there is one
28 return (x[idx - 1] + x[idx]) / 2;
29 }
30 else {
31 // Finally, in the simple case of an integer value
32 // with an odd-length list, return the x value at the index.
33 return x[idx];
34 }
35}
36export default function calculateTicks(cfg) {
37 var tickCount = cfg.tickCount, values = cfg.values;
38 if (!values || !values.length) {
39 return [];
40 }
41 var sorted = values.slice().sort(function (a, b) {
42 return a - b;
43 });
44 var ticks = [];
45 for (var i = 0; i < tickCount; i++) {
46 var p = i / (tickCount - 1);
47 ticks.push(quantileSorted(sorted, p));
48 }
49 return ticks;
50}
51//# sourceMappingURL=quantile.js.map
\No newline at end of file