@visactor/vchart 2.0.7-alpha.4 → 2.0.7-alpha.5

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/build/index.es.js CHANGED
@@ -6165,6 +6165,87 @@ const bin = (data, options) => {
6165
6165
  return out;
6166
6166
  };
6167
6167
 
6168
+ const boxplot = (data, options) => {
6169
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
6170
+ const field = null == options ? void 0 : options.field;
6171
+ if (!field) return [];
6172
+ const groupField = null == options ? void 0 : options.groupField;
6173
+ let whiskers = null !== (_a = null == options ? void 0 : options.whiskers) && void 0 !== _a ? _a : 1.5;
6174
+ const includeValues = !!(null == options ? void 0 : options.includeValues),
6175
+ names = null !== (_b = null == options ? void 0 : options.outputNames) && void 0 !== _b ? _b : {},
6176
+ keyName = null !== (_c = names.key) && void 0 !== _c ? _c : isArray$1(groupField) ? null : null !== (_d = groupField) && void 0 !== _d ? _d : "key",
6177
+ countName = null !== (_e = names.count) && void 0 !== _e ? _e : "count",
6178
+ meanName = null !== (_f = names.mean) && void 0 !== _f ? _f : "mean",
6179
+ q1Name = null !== (_g = names.q1) && void 0 !== _g ? _g : "q1",
6180
+ medianName = null !== (_h = names.median) && void 0 !== _h ? _h : "median",
6181
+ q3Name = null !== (_j = names.q3) && void 0 !== _j ? _j : "q3",
6182
+ iqrName = null !== (_k = names.iqr) && void 0 !== _k ? _k : "iqr",
6183
+ minName = null !== (_l = names.min) && void 0 !== _l ? _l : "min",
6184
+ maxName = null !== (_m = names.max) && void 0 !== _m ? _m : "max",
6185
+ lowerWhiskerName = null !== (_o = names.lowerWhisker) && void 0 !== _o ? _o : "lowerWhisker",
6186
+ upperWhiskerName = null !== (_p = names.upperWhisker) && void 0 !== _p ? _p : "upperWhisker",
6187
+ outliersName = null !== (_q = names.outliers) && void 0 !== _q ? _q : "outliers",
6188
+ valuesName = null !== (_r = names.values) && void 0 !== _r ? _r : "values",
6189
+ groups = new Map(),
6190
+ rawValues = new Map(),
6191
+ keyToGroup = new Map(),
6192
+ n = data.length;
6193
+ for (let i = 0; i < n; i++) {
6194
+ const d = data[i],
6195
+ v = d[field];
6196
+ if (isNil$1(v)) continue;
6197
+ const num = +v;
6198
+ if (!Number.isFinite(num)) continue;
6199
+ let key;
6200
+ key = isArray$1(groupField) ? groupField.map(f => String(d[f])).join("||") : groupField ? String(d[groupField]) : "___all", groups.has(key) || (groups.set(key, []), includeValues && rawValues.set(key, []), isArray$1(groupField) ? keyToGroup.set(key, Object.fromEntries(groupField.map(f => [f, d[f]]))) : keyToGroup.set(key, groupField ? d[groupField] : null));
6201
+ const arr = groups.get(key);
6202
+ if (arr && arr.push(num), includeValues) {
6203
+ const rv = rawValues.get(key);
6204
+ rv && rv.push(d);
6205
+ }
6206
+ }
6207
+ if (isArray$1(whiskers)) {
6208
+ whiskers = [clamp$1(Math.min.apply(null, whiskers), 0, 1), clamp$1(Math.max.apply(null, whiskers), 0, 1)];
6209
+ }
6210
+ const out = [];
6211
+ for (const [key, vals] of groups) {
6212
+ if (!vals || 0 === vals.length) continue;
6213
+ const sorted = vals.slice().sort((a, b) => a - b),
6214
+ count = sorted.length,
6215
+ dataMin = sorted[0],
6216
+ dataMax = sorted[sorted.length - 1];
6217
+ let sum = 0;
6218
+ for (let i = 0; i < sorted.length; i++) sum += sorted[i];
6219
+ const mean = sum / count,
6220
+ q1 = quantileSorted(sorted, .25),
6221
+ median = quantileSorted(sorted, .5),
6222
+ q3 = quantileSorted(sorted, .75),
6223
+ iqr = q3 - q1,
6224
+ lowerBound = isArray$1(whiskers) ? quantileSorted(sorted, whiskers[0]) : q1 - whiskers * iqr,
6225
+ upperBound = isArray$1(whiskers) ? quantileSorted(sorted, whiskers[1]) : q3 + whiskers * iqr;
6226
+ let lowerWhisker = dataMin;
6227
+ for (let i = 0; i < sorted.length; i++) if (sorted[i] >= lowerBound) {
6228
+ lowerWhisker = sorted[i];
6229
+ break;
6230
+ }
6231
+ let upperWhisker = dataMax;
6232
+ for (let i = sorted.length - 1; i >= 0; i--) if (sorted[i] <= upperBound) {
6233
+ upperWhisker = sorted[i];
6234
+ break;
6235
+ }
6236
+ const outliers = [];
6237
+ for (let i = 0; i < sorted.length; i++) (sorted[i] < lowerWhisker || sorted[i] > upperWhisker) && outliers.push(sorted[i]);
6238
+ const obj = {},
6239
+ representative = keyToGroup.get(key);
6240
+ if (null !== keyName) obj[keyName] = representative;else if (isArray$1(groupField)) {
6241
+ const groupObj = representative || {};
6242
+ for (const f of groupField) obj[f] = groupObj[f];
6243
+ }
6244
+ obj[countName] = count, obj[meanName] = mean, obj[q1Name] = q1, obj[medianName] = median, obj[q3Name] = q3, obj[iqrName] = iqr, obj[minName] = dataMin, obj[maxName] = dataMax, obj[lowerWhiskerName] = lowerWhisker, obj[upperWhiskerName] = upperWhisker, obj[outliersName] = outliers, includeValues && (obj[valuesName] = rawValues.get(key) || []), out.push(obj);
6245
+ }
6246
+ return out;
6247
+ };
6248
+
6168
6249
  var EOL = {},
6169
6250
  EOF = {},
6170
6251
  QUOTE = 34,
@@ -58765,7 +58846,7 @@ const lookup = (data, opt) => {
58765
58846
  });
58766
58847
  };
58767
58848
 
58768
- const version = "2.0.7-alpha.4";
58849
+ const version = "2.0.7-alpha.5";
58769
58850
 
58770
58851
  const addVChartProperty = (data, op) => {
58771
58852
  const context = op.beforeCall();
@@ -90022,6 +90103,7 @@ const registerBoxplotChart = () => {
90022
90103
  registerDimensionEvents();
90023
90104
  registerDimensionHover();
90024
90105
  registerBoxplotSeries();
90106
+ Factory.registerTransform('boxplot', boxplot);
90025
90107
  Factory.registerChart(BoxPlotChart.type, BoxPlotChart);
90026
90108
  };
90027
90109
 
package/build/index.js CHANGED
@@ -6171,6 +6171,87 @@
6171
6171
  return out;
6172
6172
  };
6173
6173
 
6174
+ const boxplot = (data, options) => {
6175
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
6176
+ const field = null == options ? void 0 : options.field;
6177
+ if (!field) return [];
6178
+ const groupField = null == options ? void 0 : options.groupField;
6179
+ let whiskers = null !== (_a = null == options ? void 0 : options.whiskers) && void 0 !== _a ? _a : 1.5;
6180
+ const includeValues = !!(null == options ? void 0 : options.includeValues),
6181
+ names = null !== (_b = null == options ? void 0 : options.outputNames) && void 0 !== _b ? _b : {},
6182
+ keyName = null !== (_c = names.key) && void 0 !== _c ? _c : isArray$1(groupField) ? null : null !== (_d = groupField) && void 0 !== _d ? _d : "key",
6183
+ countName = null !== (_e = names.count) && void 0 !== _e ? _e : "count",
6184
+ meanName = null !== (_f = names.mean) && void 0 !== _f ? _f : "mean",
6185
+ q1Name = null !== (_g = names.q1) && void 0 !== _g ? _g : "q1",
6186
+ medianName = null !== (_h = names.median) && void 0 !== _h ? _h : "median",
6187
+ q3Name = null !== (_j = names.q3) && void 0 !== _j ? _j : "q3",
6188
+ iqrName = null !== (_k = names.iqr) && void 0 !== _k ? _k : "iqr",
6189
+ minName = null !== (_l = names.min) && void 0 !== _l ? _l : "min",
6190
+ maxName = null !== (_m = names.max) && void 0 !== _m ? _m : "max",
6191
+ lowerWhiskerName = null !== (_o = names.lowerWhisker) && void 0 !== _o ? _o : "lowerWhisker",
6192
+ upperWhiskerName = null !== (_p = names.upperWhisker) && void 0 !== _p ? _p : "upperWhisker",
6193
+ outliersName = null !== (_q = names.outliers) && void 0 !== _q ? _q : "outliers",
6194
+ valuesName = null !== (_r = names.values) && void 0 !== _r ? _r : "values",
6195
+ groups = new Map(),
6196
+ rawValues = new Map(),
6197
+ keyToGroup = new Map(),
6198
+ n = data.length;
6199
+ for (let i = 0; i < n; i++) {
6200
+ const d = data[i],
6201
+ v = d[field];
6202
+ if (isNil$1(v)) continue;
6203
+ const num = +v;
6204
+ if (!Number.isFinite(num)) continue;
6205
+ let key;
6206
+ key = isArray$1(groupField) ? groupField.map(f => String(d[f])).join("||") : groupField ? String(d[groupField]) : "___all", groups.has(key) || (groups.set(key, []), includeValues && rawValues.set(key, []), isArray$1(groupField) ? keyToGroup.set(key, Object.fromEntries(groupField.map(f => [f, d[f]]))) : keyToGroup.set(key, groupField ? d[groupField] : null));
6207
+ const arr = groups.get(key);
6208
+ if (arr && arr.push(num), includeValues) {
6209
+ const rv = rawValues.get(key);
6210
+ rv && rv.push(d);
6211
+ }
6212
+ }
6213
+ if (isArray$1(whiskers)) {
6214
+ whiskers = [clamp$1(Math.min.apply(null, whiskers), 0, 1), clamp$1(Math.max.apply(null, whiskers), 0, 1)];
6215
+ }
6216
+ const out = [];
6217
+ for (const [key, vals] of groups) {
6218
+ if (!vals || 0 === vals.length) continue;
6219
+ const sorted = vals.slice().sort((a, b) => a - b),
6220
+ count = sorted.length,
6221
+ dataMin = sorted[0],
6222
+ dataMax = sorted[sorted.length - 1];
6223
+ let sum = 0;
6224
+ for (let i = 0; i < sorted.length; i++) sum += sorted[i];
6225
+ const mean = sum / count,
6226
+ q1 = quantileSorted(sorted, .25),
6227
+ median = quantileSorted(sorted, .5),
6228
+ q3 = quantileSorted(sorted, .75),
6229
+ iqr = q3 - q1,
6230
+ lowerBound = isArray$1(whiskers) ? quantileSorted(sorted, whiskers[0]) : q1 - whiskers * iqr,
6231
+ upperBound = isArray$1(whiskers) ? quantileSorted(sorted, whiskers[1]) : q3 + whiskers * iqr;
6232
+ let lowerWhisker = dataMin;
6233
+ for (let i = 0; i < sorted.length; i++) if (sorted[i] >= lowerBound) {
6234
+ lowerWhisker = sorted[i];
6235
+ break;
6236
+ }
6237
+ let upperWhisker = dataMax;
6238
+ for (let i = sorted.length - 1; i >= 0; i--) if (sorted[i] <= upperBound) {
6239
+ upperWhisker = sorted[i];
6240
+ break;
6241
+ }
6242
+ const outliers = [];
6243
+ for (let i = 0; i < sorted.length; i++) (sorted[i] < lowerWhisker || sorted[i] > upperWhisker) && outliers.push(sorted[i]);
6244
+ const obj = {},
6245
+ representative = keyToGroup.get(key);
6246
+ if (null !== keyName) obj[keyName] = representative;else if (isArray$1(groupField)) {
6247
+ const groupObj = representative || {};
6248
+ for (const f of groupField) obj[f] = groupObj[f];
6249
+ }
6250
+ obj[countName] = count, obj[meanName] = mean, obj[q1Name] = q1, obj[medianName] = median, obj[q3Name] = q3, obj[iqrName] = iqr, obj[minName] = dataMin, obj[maxName] = dataMax, obj[lowerWhiskerName] = lowerWhisker, obj[upperWhiskerName] = upperWhisker, obj[outliersName] = outliers, includeValues && (obj[valuesName] = rawValues.get(key) || []), out.push(obj);
6251
+ }
6252
+ return out;
6253
+ };
6254
+
6174
6255
  var EOL = {},
6175
6256
  EOF = {},
6176
6257
  QUOTE = 34,
@@ -58771,7 +58852,7 @@
58771
58852
  });
58772
58853
  };
58773
58854
 
58774
- const version = "2.0.7-alpha.4";
58855
+ const version = "2.0.7-alpha.5";
58775
58856
 
58776
58857
  const addVChartProperty = (data, op) => {
58777
58858
  const context = op.beforeCall();
@@ -90028,6 +90109,7 @@
90028
90109
  registerDimensionEvents();
90029
90110
  registerDimensionHover();
90030
90111
  registerBoxplotSeries();
90112
+ Factory.registerTransform('boxplot', boxplot);
90031
90113
  Factory.registerChart(BoxPlotChart.type, BoxPlotChart);
90032
90114
  };
90033
90115