From e88858edb19b3187283ecabae13b9c45951d5736 Mon Sep 17 00:00:00 2001 From: Leon Sorokin Date: Wed, 6 Mar 2024 11:27:46 -0600 Subject: [PATCH] Histogram: Fix heuristic for x axis distribution from bucket progression (#83975) --- .../src/transformations/transformers/histogram.ts | 2 +- public/app/plugins/panel/histogram/Histogram.tsx | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/grafana-data/src/transformations/transformers/histogram.ts b/packages/grafana-data/src/transformations/transformers/histogram.ts index 1f333048e8e..ea5ea3c9770 100644 --- a/packages/grafana-data/src/transformations/transformers/histogram.ts +++ b/packages/grafana-data/src/transformations/transformers/histogram.ts @@ -403,7 +403,7 @@ export function buildHistogram(frames: DataFrame[], options?: HistogramTransform } } - const getBucket = (v: number) => incrRoundDn(v - bucketOffset, bucketSize!) + bucketOffset; + const getBucket = (v: number) => roundDecimals(incrRoundDn(v - bucketOffset, bucketSize!) + bucketOffset, 9); // guess number of decimals let bucketDecimals = (('' + bucketSize).match(/\.\d+$/) ?? ['.'])[0].length - 1; diff --git a/public/app/plugins/panel/histogram/Histogram.tsx b/public/app/plugins/panel/histogram/Histogram.tsx index 04cdab00cf6..a2bb2ae2783 100644 --- a/public/app/plugins/panel/histogram/Histogram.tsx +++ b/public/app/plugins/panel/histogram/Histogram.tsx @@ -8,6 +8,7 @@ import { getFieldColorModeForField, getFieldSeriesColor, GrafanaTheme2, + roundDecimals, } from '@grafana/data'; import { histogramBucketSizes, @@ -49,12 +50,16 @@ export interface HistogramProps extends Themeable2 { export function getBucketSize(frame: DataFrame) { // assumes BucketMin is fields[0] and BucktMax is fields[1] - return frame.fields[0].type === FieldType.string ? 1 : frame.fields[1].values[0] - frame.fields[0].values[0]; + return frame.fields[0].type === FieldType.string + ? 1 + : roundDecimals(frame.fields[1].values[0] - frame.fields[0].values[0], 9); } export function getBucketSize1(frame: DataFrame) { // assumes BucketMin is fields[0] and BucktMax is fields[1] - return frame.fields[0].type === FieldType.string ? 1 : frame.fields[1].values[1] - frame.fields[0].values[1]; + return frame.fields[0].type === FieldType.string + ? 1 + : roundDecimals(frame.fields[1].values[1] - frame.fields[0].values[1], 9); } const prepConfig = (frame: DataFrame, theme: GrafanaTheme2) => {