UNPKG

cione-comp-lib

Version:

`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`

76 lines (75 loc) 2.25 kB
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 };