@antv/g2plot
Version:
G2 Plot, a market of plots built with the Grammar of Graphics'
48 lines • 2.06 kB
JavaScript
;
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