[v11.3.x] Timeseries: Utilize min/max on stacking percentage (#95793)

Timeseries: Utilize min/max on stacking percentage (#95581)

* Bring in defined min/max into stacking range

* simplify logic

* different approach

---------

Co-authored-by: Leon Sorokin <leeoniya@gmail.com>
(cherry picked from commit 68aefc73b6)

Co-authored-by: Kristina <kristina.durivage@grafana.com>
This commit is contained in:
grafana-delivery-bot[bot]
2024-11-04 15:09:28 -06:00
committed by GitHub
co-authored by Kristina
parent e31c4fc59b
commit 9bb7d77cdb
2 changed files with 23 additions and 16 deletions
@@ -1,7 +1,7 @@
import uPlot, { Scale, Range } from 'uplot';
import { DecimalCount, incrRoundDn, incrRoundUp, isBooleanUnit } from '@grafana/data';
import { ScaleOrientation, ScaleDirection, ScaleDistribution } from '@grafana/schema';
import { ScaleOrientation, ScaleDirection, ScaleDistribution, StackingMode } from '@grafana/schema';
import { PlotConfigBuilder } from '../types';
@@ -20,6 +20,7 @@ export interface ScaleProps {
linearThreshold?: number;
centeredZero?: boolean;
decimals?: DecimalCount;
stackingMode?: StackingMode;
}
export class UPlotScaleBuilder extends PlotConfigBuilder<ScaleProps, Scale> {
@@ -41,8 +42,19 @@ export class UPlotScaleBuilder extends PlotConfigBuilder<ScaleProps, Scale> {
orientation,
centeredZero,
decimals,
stackingMode,
} = this.props;
if (stackingMode === StackingMode.Percent) {
if (hardMin == null && softMin == null) {
softMin = 0;
}
if (hardMax == null && softMax == null) {
softMax = 1;
}
}
const distr = this.props.distribution;
const distribution = !isTime
+10 -15
View File
@@ -247,24 +247,19 @@ export const preparePlotConfigBuilder: UPlotConfigPrepFn = ({
softMin: customConfig.axisSoftMin,
softMax: customConfig.axisSoftMax,
centeredZero: customConfig.axisCenteredZero,
stackingMode: customConfig.stacking?.mode,
range:
customConfig.stacking?.mode === StackingMode.Percent
field.type === FieldType.enum
? (u: uPlot, dataMin: number, dataMax: number) => {
dataMin = dataMin < 0 ? -1 : 0;
dataMax = dataMax > 0 ? 1 : 0;
return [dataMin, dataMax];
// this is the exhaustive enum (stable)
let len = field.config.type!.enum!.text!.length;
return [-1, len];
// these are only values that are present
// return [dataMin - 1, dataMax + 1]
}
: field.type === FieldType.enum
? (u: uPlot, dataMin: number, dataMax: number) => {
// this is the exhaustive enum (stable)
let len = field.config.type!.enum!.text!.length;
return [-1, len];
// these are only values that are present
// return [dataMin - 1, dataMax + 1]
}
: undefined,
: undefined,
decimals: field.config.decimals,
},
field