cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
76 lines (75 loc) • 2.25 kB
JavaScript
import { isString, isFunction } from "../../../zrender/lib/core/util.mjs";
var samplers = {
average: function(frame) {
var sum = 0;
var count = 0;
for (var i = 0; i < frame.length; i++) {
if (!isNaN(frame[i])) {
sum += frame[i];
count++;
}
}
return count === 0 ? NaN : sum / count;
},
sum: function(frame) {
var sum = 0;
for (var i = 0; i < frame.length; i++) {
sum += frame[i] || 0;
}
return sum;
},
max: function(frame) {
var max = -Infinity;
for (var i = 0; i < frame.length; i++) {
frame[i] > max && (max = frame[i]);
}
return isFinite(max) ? max : NaN;
},
min: function(frame) {
var min = Infinity;
for (var i = 0; i < frame.length; i++) {
frame[i] < min && (min = frame[i]);
}
return isFinite(min) ? min : NaN;
},
nearest: function(frame) {
return frame[0];
}
};
var indexSampler = function(frame) {
return Math.round(frame.length / 2);
};
function dataSample(seriesType) {
return {
seriesType,
reset: function(seriesModel, ecModel, api) {
var data = seriesModel.getData();
var sampling = seriesModel.get("sampling");
var coordSys = seriesModel.coordinateSystem;
var count = data.count();
if (count > 10 && coordSys.type === "cartesian2d" && sampling) {
var baseAxis = coordSys.getBaseAxis();
var valueAxis = coordSys.getOtherAxis(baseAxis);
var extent = baseAxis.getExtent();
var dpr = api.getDevicePixelRatio();
var size = Math.abs(extent[1] - extent[0]) * (dpr || 1);
var rate = Math.round(count / size);
if (isFinite(rate) && rate > 1) {
if (sampling === "lttb") {
seriesModel.setData(data.lttbDownSample(data.mapDimension(valueAxis.dim), 1 / rate));
}
var sampler = void 0;
if (isString(sampling)) {
sampler = samplers[sampling];
} else if (isFunction(sampling)) {
sampler = sampling;
}
if (sampler) {
seriesModel.setData(data.downSample(data.mapDimension(valueAxis.dim), 1 / rate, sampler, indexSampler));
}
}
}
}
};
}
export { dataSample as default };