From 0f65cde6e714475995f126a0613730bc3694f92d Mon Sep 17 00:00:00 2001 From: Ryan Laurie <30528226+iethree@users.noreply.github.com> Date: Tue, 15 Aug 2023 16:42:29 -0600 Subject: [PATCH] Round small y-axis values to zero with no min/max difference on the Y scale (#33179) * Round small values to zero with no min/max difference on the Y scale * dont show nulls as zero --- frontend/src/metabase/visualizations/lib/apply_axis.js | 8 ++++++-- .../metabase/visualizations/lib/apply_axis.unit.spec.js | 6 ++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/frontend/src/metabase/visualizations/lib/apply_axis.js b/frontend/src/metabase/visualizations/lib/apply_axis.js index adb76d687b9..f4344a0562c 100644 --- a/frontend/src/metabase/visualizations/lib/apply_axis.js +++ b/frontend/src/metabase/visualizations/lib/apply_axis.js @@ -352,7 +352,10 @@ export function applyChartOrdinalXAxis( // The tolerance is arbitrarily set to one millionth of the yExtent. const TOLERANCE_TO_Y_EXTENT = 1e6; export function maybeRoundValueToZero(value, [yMin, yMax]) { - const tolerance = Math.abs(yMax - yMin) / TOLERANCE_TO_Y_EXTENT; + const tolerance = + yMin !== yMax + ? Math.abs(yMax - yMin) / TOLERANCE_TO_Y_EXTENT + : 1 / TOLERANCE_TO_Y_EXTENT; return Math.abs(value) < tolerance ? 0 : value; } @@ -490,7 +493,8 @@ export function getYValueFormatter(chart, series, yExtent) { const metricColumn = series[seriesIndex].data.cols[1]; const columnSettings = chart.settings.column(metricColumn); const columnExtent = options.extent ?? yExtent; - const roundedValue = maybeRoundValueToZero(value, columnExtent); + const roundedValue = + value === null ? "" : maybeRoundValueToZero(value, columnExtent); return formatValue(roundedValue, { ...columnSettings, ...options }); }; } diff --git a/frontend/src/metabase/visualizations/lib/apply_axis.unit.spec.js b/frontend/src/metabase/visualizations/lib/apply_axis.unit.spec.js index 331940989e6..d07be26bba9 100644 --- a/frontend/src/metabase/visualizations/lib/apply_axis.unit.spec.js +++ b/frontend/src/metabase/visualizations/lib/apply_axis.unit.spec.js @@ -61,5 +61,11 @@ describe("visualization.lib.apply_axis", () => { expect(value).toBe(0.0000000000018); }); + + it("should work on single-value charts (where minExtent === maxExtent)", () => { + const value = maybeRoundValueToZero(0.0000000000018, [0.00001, 0.00001]); + + expect(value).toBe(0); + }); }); }); -- GitLab