diff --git a/src/processor/dataSample.ts b/src/processor/dataSample.ts index 28579a652e..cbd370f2ba 100644 --- a/src/processor/dataSample.ts +++ b/src/processor/dataSample.ts @@ -61,6 +61,22 @@ const samplers: Dictionary = { // NaN will cause illegal axis extent. return isFinite(min) ? min : NaN; }, + minmax: function (frame) { + let turningPointAbsoluteValue = -Infinity; + let turningPointOriginalValue = -Infinity; + + for (let i = 0; i < frame.length; i++) { + const originalValue = frame[i]; + const absoluteValue = Math.abs(originalValue); + + if (absoluteValue > turningPointAbsoluteValue) { + turningPointAbsoluteValue = absoluteValue; + turningPointOriginalValue = originalValue; + } + } + + return isFinite(turningPointOriginalValue) ? turningPointOriginalValue : NaN; + }, // TODO // Median nearest: function (frame) { @@ -116,4 +132,4 @@ export default function dataSample(seriesType: string): StageHandler { } } }; -} \ No newline at end of file +} diff --git a/src/util/types.ts b/src/util/types.ts index 4a212872dd..c7b0c4ef36 100644 --- a/src/util/types.ts +++ b/src/util/types.ts @@ -1675,7 +1675,7 @@ export interface SeriesStackOptionMixin { type SamplingFunc = (frame: ArrayLike) => number; export interface SeriesSamplingOptionMixin { - sampling?: 'none' | 'average' | 'min' | 'max' | 'sum' | 'lttb' | SamplingFunc + sampling?: 'none' | 'average' | 'min' | 'max' | 'minmax' | 'sum' | 'lttb' | SamplingFunc } export interface SeriesEncodeOptionMixin {