UNPKG

@antv/g2plot

Version:

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

48 lines 2.06 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var util_1 = require("@antv/util"); exports.transformDataPercentage = function (data, groupField, measures) { // 按照groupBy字段计算各个group的总和 var chain = util_1.groupBy(data, groupField); chain = util_1.mapValues(chain, function (items) { return util_1.map(items, function (item) { return util_1.map(measures, function (field) { return item[field]; }); }); }); chain = util_1.mapValues(chain, util_1.flatten); chain = util_1.mapValues(chain, function (vals) { return util_1.map(vals, function (val) { // @ts-ignore var v = Number.parseFloat(val); if (!util_1.isNumber(v) || isNaN(v)) { return 0; } return v; }); }); // @ts-ignore var groupTotals = util_1.mapValues(chain, function (vals) { return util_1.reduce(vals, function (sum, val) { return sum + val; }, 0); }); // 覆盖measures字段的值为对于的百分比 var newData = util_1.map(data, function (item) { var rst = tslib_1.__assign(tslib_1.__assign({}, item), { _origin: item, total: groupTotals[item[groupField]] }); util_1.each(measures, function (field) { // @ts-ignore rst[field] = item[field] / groupTotals[item[groupField]]; }); return rst; }); // 检查精度,确保总和为1 util_1.each(util_1.groupBy(newData, groupField), function (items) { var sum = 0; util_1.each(items, function (item, itemIdx) { util_1.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