utils.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.transformViolinData = exports.toViolinValue = exports.toBoxValue = void 0;
  4. var tslib_1 = require("tslib");
  5. var util_1 = require("@antv/util");
  6. var pdfast_1 = tslib_1.__importDefault(require("pdfast"));
  7. var quantile_1 = require("../../utils/transform/quantile");
  8. var toBoxValue = function (values) {
  9. return {
  10. low: (0, util_1.min)(values),
  11. high: (0, util_1.max)(values),
  12. q1: (0, quantile_1.quantile)(values, 0.25),
  13. q3: (0, quantile_1.quantile)(values, 0.75),
  14. median: (0, quantile_1.quantile)(values, [0.5]),
  15. minMax: [(0, util_1.min)(values), (0, util_1.max)(values)],
  16. quantile: [(0, quantile_1.quantile)(values, 0.25), (0, quantile_1.quantile)(values, 0.75)],
  17. };
  18. };
  19. exports.toBoxValue = toBoxValue;
  20. var toViolinValue = function (values, pdfOptions) {
  21. var pdfResults = pdfast_1.default.create(values, pdfOptions);
  22. return {
  23. violinSize: pdfResults.map(function (result) { return result.y; }),
  24. violinY: pdfResults.map(function (result) { return result.x; }),
  25. };
  26. };
  27. exports.toViolinValue = toViolinValue;
  28. var transformViolinData = function (options) {
  29. var xField = options.xField, yField = options.yField, seriesField = options.seriesField, data = options.data, kde = options.kde;
  30. /** 生成概率密度函数的配置 */
  31. var pdfOptions = {
  32. min: kde.min,
  33. max: kde.max,
  34. size: kde.sampleSize,
  35. width: kde.width,
  36. };
  37. // 无拆分
  38. if (!seriesField) {
  39. var group_1 = (0, util_1.groupBy)(data, xField);
  40. return Object.keys(group_1).map(function (x) {
  41. var records = group_1[x];
  42. var values = records.map(function (record) { return record[yField]; });
  43. return tslib_1.__assign(tslib_1.__assign({ x: x }, (0, exports.toViolinValue)(values, pdfOptions)), (0, exports.toBoxValue)(values));
  44. });
  45. }
  46. // 有拆分
  47. var resultList = [];
  48. var seriesGroup = (0, util_1.groupBy)(data, seriesField);
  49. Object.keys(seriesGroup).forEach(function (series) {
  50. var group = (0, util_1.groupBy)(seriesGroup[series], xField);
  51. return Object.keys(group).forEach(function (key) {
  52. var _a;
  53. var records = group[key];
  54. var values = records.map(function (record) { return record[yField]; });
  55. resultList.push(tslib_1.__assign(tslib_1.__assign((_a = { x: key }, _a[seriesField] = series, _a), (0, exports.toViolinValue)(values, pdfOptions)), (0, exports.toBoxValue)(values)));
  56. });
  57. });
  58. return resultList;
  59. };
  60. exports.transformViolinData = transformViolinData;
  61. //# sourceMappingURL=utils.js.map