utils.js 2.1 KB

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