@antv/g2plot
Version:
G2 Plot, a market of plots built with the Grammar of Graphics'
73 lines • 3.07 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var _ = tslib_1.__importStar(require("@antv/util"));
var global_1 = require("../../base/global");
var math_1 = require("../../util/math");
var layer_1 = tslib_1.__importDefault(require("../column/layer"));
var HistogramLayer = /** @class */ (function (_super) {
tslib_1.__extends(HistogramLayer, _super);
function HistogramLayer() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = 'histogram';
return _this;
}
HistogramLayer.prototype.init = function () {
this.options.xField = 'range';
this.options.yField = 'count';
_super.prototype.init.call(this);
};
HistogramLayer.prototype.processData = function (originData) {
var _this = this;
var _a = this.options, binField = _a.binField, binWidth = _a.binWidth, binNumber = _a.binNumber;
var originData_copy = _.clone(originData);
// 根据binField value对源数据进行排序
_.sortBy(originData_copy, binField);
// 获取源数据binField values的range
var values = _.valuesOfKey(originData_copy, binField);
var range = _.getRange(values);
var rangeWidth = range.max - range.min;
// 计算分箱,直方图分箱的计算基于binWidth,如配置了binNumber则将其转为binWidth进行计算
var _binWidth = binWidth;
if (!binWidth && binNumber) {
_binWidth = rangeWidth / binNumber;
}
// 当binWidth和binNumber都没有指定的情况,采用Sturges formula自动生成binWidth
if (!binWidth && !binNumber) {
var _defaultBinNumber = math_1.sturges(values);
_binWidth = rangeWidth / _defaultBinNumber;
}
var bins = {};
_.each(originData_copy, function (data) {
var value = data[binField];
var bin = _this.getBin(value, _binWidth);
var binName = bin[0] + "-" + bin[1];
if (!_.hasKey(bins, binName)) {
bins[binName] = { name: binName, range: bin, count: 0, data: [] };
}
bins[binName].data.push(data);
bins[binName].count += 1;
});
// 将分箱数据转换为plotData
var plotData = [];
_.each(bins, function (bin) {
plotData.push(bin);
});
return plotData;
};
HistogramLayer.prototype.scale = function () {
_super.prototype.scale.call(this);
// fixme: 类型定义
var range = this.config.scales.range;
range.nice = false;
range.type = 'linear';
};
HistogramLayer.prototype.getBin = function (value, binWidth) {
var index = Math.floor(value / binWidth);
return [binWidth * index, binWidth * (index + 1)];
};
return HistogramLayer;
}(layer_1.default));
exports.default = HistogramLayer;
global_1.registerPlotType('histogram', HistogramLayer);
//# sourceMappingURL=layer.js.map