@antv/g2plot
Version:
G2 Plot, a market of plots built with the Grammar of Graphics'
71 lines • 2.92 kB
JavaScript
import { __extends } from "tslib";
import * as _ from '@antv/util';
import { registerPlotType } from '../../base/global';
import { sturges } from '../../util/math';
import Column from '../column/layer';
var HistogramLayer = /** @class */ (function (_super) {
__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 = 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;
}(Column));
export default HistogramLayer;
registerPlotType('histogram', HistogramLayer);
//# sourceMappingURL=layer.js.map