cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
117 lines (116 loc) • 4.36 kB
JavaScript
import { __extends } from "../../../tslib/tslib.es6.mjs";
import { map } from "../../../zrender/lib/core/util.mjs";
import Scale from "./Scale.mjs";
import { round, quantity, getPrecision } from "../util/number.mjs";
import { contain, normalize, scale } from "./helper.mjs";
import IntervalScale from "./Interval.mjs";
var scaleProto = Scale.prototype;
var intervalScaleProto = IntervalScale.prototype;
var roundingErrorFix = round;
var mathFloor = Math.floor;
var mathCeil = Math.ceil;
var mathPow = Math.pow;
var mathLog = Math.log;
var LogScale = function(_super) {
__extends(LogScale2, _super);
function LogScale2() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = "log";
_this.base = 10;
_this._originalScale = new IntervalScale();
_this._interval = 0;
return _this;
}
LogScale2.prototype.getTicks = function(expandToNicedExtent) {
var originalScale = this._originalScale;
var extent = this._extent;
var originalExtent = originalScale.getExtent();
var ticks = intervalScaleProto.getTicks.call(this, expandToNicedExtent);
return map(ticks, function(tick) {
var val = tick.value;
var powVal = round(mathPow(this.base, val));
powVal = val === extent[0] && this._fixMin ? fixRoundingError(powVal, originalExtent[0]) : powVal;
powVal = val === extent[1] && this._fixMax ? fixRoundingError(powVal, originalExtent[1]) : powVal;
return {
value: powVal
};
}, this);
};
LogScale2.prototype.setExtent = function(start, end) {
var base = mathLog(this.base);
start = mathLog(Math.max(0, start)) / base;
end = mathLog(Math.max(0, end)) / base;
intervalScaleProto.setExtent.call(this, start, end);
};
LogScale2.prototype.getExtent = function() {
var base = this.base;
var extent = scaleProto.getExtent.call(this);
extent[0] = mathPow(base, extent[0]);
extent[1] = mathPow(base, extent[1]);
var originalScale = this._originalScale;
var originalExtent = originalScale.getExtent();
this._fixMin && (extent[0] = fixRoundingError(extent[0], originalExtent[0]));
this._fixMax && (extent[1] = fixRoundingError(extent[1], originalExtent[1]));
return extent;
};
LogScale2.prototype.unionExtent = function(extent) {
this._originalScale.unionExtent(extent);
var base = this.base;
extent[0] = mathLog(extent[0]) / mathLog(base);
extent[1] = mathLog(extent[1]) / mathLog(base);
scaleProto.unionExtent.call(this, extent);
};
LogScale2.prototype.unionExtentFromData = function(data, dim) {
this.unionExtent(data.getApproximateExtent(dim));
};
LogScale2.prototype.calcNiceTicks = function(approxTickNum) {
approxTickNum = approxTickNum || 10;
var extent = this._extent;
var span = extent[1] - extent[0];
if (span === Infinity || span <= 0) {
return;
}
var interval = quantity(span);
var err = approxTickNum / span * interval;
if (err <= 0.5) {
interval *= 10;
}
while (!isNaN(interval) && Math.abs(interval) < 1 && Math.abs(interval) > 0) {
interval *= 10;
}
var niceExtent = [round(mathCeil(extent[0] / interval) * interval), round(mathFloor(extent[1] / interval) * interval)];
this._interval = interval;
this._niceExtent = niceExtent;
};
LogScale2.prototype.calcNiceExtent = function(opt) {
intervalScaleProto.calcNiceExtent.call(this, opt);
this._fixMin = opt.fixMin;
this._fixMax = opt.fixMax;
};
LogScale2.prototype.parse = function(val) {
return val;
};
LogScale2.prototype.contain = function(val) {
val = mathLog(val) / mathLog(this.base);
return contain(val, this._extent);
};
LogScale2.prototype.normalize = function(val) {
val = mathLog(val) / mathLog(this.base);
return normalize(val, this._extent);
};
LogScale2.prototype.scale = function(val) {
val = scale(val, this._extent);
return mathPow(this.base, val);
};
LogScale2.type = "log";
return LogScale2;
}(Scale);
var proto = LogScale.prototype;
proto.getMinorTicks = intervalScaleProto.getMinorTicks;
proto.getLabel = intervalScaleProto.getLabel;
function fixRoundingError(val, originalVal) {
return roundingErrorFix(val, getPrecision(originalVal));
}
Scale.registerClass(LogScale);
var LogScale$1 = LogScale;
export { LogScale$1 as default };