From c58966d58c79a526882a5f20faf6bef5c40bb51a Mon Sep 17 00:00:00 2001 From: Jukka Kurkela Date: Sun, 4 Apr 2021 14:03:48 +0300 Subject: [PATCH] Fix: tick spacing when min=0 | niceMin or max=0 (#8811) --- src/scales/scale.linearbase.js | 8 +++---- test/fixtures/scale.linear/issue-8806.js | 26 ++++++++++++++++++++++ test/fixtures/scale.linear/issue-8806.png | Bin 0 -> 4820 bytes 3 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 test/fixtures/scale.linear/issue-8806.js create mode 100644 test/fixtures/scale.linear/issue-8806.png diff --git a/src/scales/scale.linearbase.js b/src/scales/scale.linearbase.js index a215c7571..3a671d269 100644 --- a/src/scales/scale.linearbase.js +++ b/src/scales/scale.linearbase.js @@ -98,12 +98,12 @@ function generateTicks(generationOptions, dataRange) { let j = 0; if (minDefined) { ticks.push({value: min}); - // If the niceMin is smaller than min, skip it - if (niceMin < min) { + // If the niceMin is smaller or equal to min, skip it + if (niceMin <= min) { j++; } // If the next nice tick is close to min, skip that too - if (almostWhole(Math.round((niceMin + j * spacing) * factor) / factor / min, spacing / 1000)) { + if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, spacing / 10)) { j++; } } @@ -114,7 +114,7 @@ function generateTicks(generationOptions, dataRange) { if (maxDefined) { // If the previous tick is close to max, replace it with max, else add max - if (almostWhole(ticks[ticks.length - 1].value / max, spacing / 1000)) { + if (almostEquals(ticks[ticks.length - 1].value, max, spacing / 10)) { ticks[ticks.length - 1].value = max; } else { ticks.push({value: max}); diff --git a/test/fixtures/scale.linear/issue-8806.js b/test/fixtures/scale.linear/issue-8806.js new file mode 100644 index 000000000..ec53498fc --- /dev/null +++ b/test/fixtures/scale.linear/issue-8806.js @@ -0,0 +1,26 @@ +module.exports = { + description: 'https://github.com/chartjs/Chart.js/issues/8806', + config: { + type: 'bar', + data: { + labels: ['0', '1', '2', '3', '4', '5', '6'], + datasets: [{ + label: '# of Votes', + data: [32, 46, 28, 21, 20, 13, 27] + }] + }, + options: { + scales: { + x: {display: false}, + y: {ticks: {maxTicksLimit: 4}, min: 0} + } + } + }, + options: { + spriteText: true, + canvas: { + width: 256, + height: 256 + } + } +}; diff --git a/test/fixtures/scale.linear/issue-8806.png b/test/fixtures/scale.linear/issue-8806.png new file mode 100644 index 0000000000000000000000000000000000000000..9db9d332422f34e34c3208bf50b5ebc584b96525 GIT binary patch literal 4820 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 literal 0 Hc-jL100001 -- 2.47.3