UNPKG

@antv/g2plot

Version:

G2 Plot, a market of plots built with the Grammar of Graphics'

46 lines 1.91 kB
import { __assign } from "tslib"; import { groupBy, mapValues, map, flatten, isNumber, reduce, each } from '@antv/util'; export var transformDataPercentage = function (data, groupField, measures) { // 按照groupBy字段计算各个group的总和 var chain = groupBy(data, groupField); chain = mapValues(chain, function (items) { return map(items, function (item) { return map(measures, function (field) { return item[field]; }); }); }); chain = mapValues(chain, flatten); chain = mapValues(chain, function (vals) { return map(vals, function (val) { // @ts-ignore var v = Number.parseFloat(val); if (!isNumber(v) || isNaN(v)) { return 0; } return v; }); }); // @ts-ignore var groupTotals = mapValues(chain, function (vals) { return reduce(vals, function (sum, val) { return sum + val; }, 0); }); // 覆盖measures字段的值为对于的百分比 var newData = map(data, function (item) { var rst = __assign(__assign({}, item), { _origin: item, total: groupTotals[item[groupField]] }); each(measures, function (field) { // @ts-ignore rst[field] = item[field] / groupTotals[item[groupField]]; }); return rst; }); // 检查精度,确保总和为1 each(groupBy(newData, groupField), function (items) { var sum = 0; each(items, function (item, itemIdx) { each(measures, function (field, fieldIdx) { // @ts-ignore if (sum + item[field] >= 1 || (itemIdx === items.length - 1 && fieldIdx === measures.length - 1)) { item[field] = 1 - sum; } // @ts-ignore sum += item[field]; }); }); }); // @ts-ignore return newData; }; //# sourceMappingURL=data.js.map