UNPKG

@antv/g2plot

Version:

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

71 lines 2.92 kB
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