From 919e50b9fcbcadfceac6e85d5b0d1347a2e6fbb7 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Mon, 29 Jun 2020 04:52:28 -0700 Subject: [PATCH] Generate ticks from small to large (#7559) * Generate ticks from small to large * Add note to migration guide --- docs/docs/getting-started/v3-migration.md | 2 ++ src/scales/scale.linear.js | 9 ----- src/scales/scale.linearbase.js | 11 +----- test/fixtures/core.layouts/long-labels.png | Bin 13132 -> 13119 bytes test/specs/core.layouts.tests.js | 2 +- test/specs/core.ticks.tests.js | 2 +- test/specs/plugin.tooltip.tests.js | 2 +- test/specs/scale.linear.tests.js | 38 ++++++++++----------- 8 files changed, 25 insertions(+), 41 deletions(-) diff --git a/docs/docs/getting-started/v3-migration.md b/docs/docs/getting-started/v3-migration.md index a5974aea2..b2be1b28b 100644 --- a/docs/docs/getting-started/v3-migration.md +++ b/docs/docs/getting-started/v3-migration.md @@ -288,6 +288,7 @@ The following properties and methods were removed: #### Scales +* `LinearScaleBase.handleDirectionalChanges` * `LogarithmicScale.minNotZero` * `Scale.getRightValue` * `Scale.longestLabelWidth` @@ -410,6 +411,7 @@ The APIs listed in this section have changed in signature or behaviour from vers * `Scale.convertTicksToLabels` was renamed to `generateTickLabels`. It is now expected to set the label property on the ticks given as input * `Scale.ticks` now contains objects instead of strings * When the `autoSkip` option is enabled, `Scale.ticks` now contains only the non-skipped ticks instead of all ticks. +* Ticks are now always generated in monotonically increasing order ##### Time Scale diff --git a/src/scales/scale.linear.js b/src/scales/scale.linear.js index de3ec340a..c7f8e88ec 100644 --- a/src/scales/scale.linear.js +++ b/src/scales/scale.linear.js @@ -41,15 +41,6 @@ class LinearScale extends LinearScaleBase { return Math.ceil(me.height / tickFont.lineHeight); } - /** - * Called after the ticks are built - * @protected - */ - handleDirectionalChanges(ticks) { - // If we are in a vertical orientation the top value is the highest so reverse the array - return this.isHorizontal() ? ticks : ticks.reverse(); - } - // Utils getPixelForValue(value) { const me = this; diff --git a/src/scales/scale.linearbase.js b/src/scales/scale.linearbase.js index c0f3def69..621482910 100644 --- a/src/scales/scale.linearbase.js +++ b/src/scales/scale.linearbase.js @@ -217,13 +217,6 @@ export default class LinearScaleBase extends Scale { return Number.POSITIVE_INFINITY; } - /** - * @protected - */ - handleDirectionalChanges(ticks) { - return ticks; - } - buildTicks() { const me = this; const opts = me.options; @@ -243,9 +236,7 @@ export default class LinearScaleBase extends Scale { precision: tickOpts.precision, stepSize: valueOrDefault(tickOpts.fixedStepSize, tickOpts.stepSize) }; - let ticks = generateTicks(numericGeneratorOptions, me); - - ticks = me.handleDirectionalChanges(ticks); + const ticks = generateTicks(numericGeneratorOptions, me); // At this point, we need to update our max and min given the tick values since we have expanded the // range of the scale diff --git a/test/fixtures/core.layouts/long-labels.png b/test/fixtures/core.layouts/long-labels.png index 49d1637ba2ee454c178eef2872384c639ae2656b..ed33676753e1278d20fa5c518fd0b40f71245e3b 100644 GIT binary patch literal 13119 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 KN|#9)zxsbRvUX?y literal 13132 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 p.id === 'tooltip'); const Tooltip = tooltipPlugin._element; -describe('Core.Tooltip', function() { +describe('Plugin.Tooltip', function() { describe('auto', jasmine.fixture.specs('core.tooltip')); describe('config', function() { diff --git a/test/specs/scale.linear.tests.js b/test/specs/scale.linear.tests.js index ba364710e..0d1eec7cd 100644 --- a/test/specs/scale.linear.tests.js +++ b/test/specs/scale.linear.tests.js @@ -543,8 +543,8 @@ describe('Linear Scale', function() { expect(chart.scales.y.min).toBe(-1010); expect(chart.scales.y.max).toBe(1010); var labels = getLabels(chart.scales.y); - expect(labels[0]).toBe('1,010'); - expect(labels[labels.length - 1]).toBe('-1,010'); + expect(labels[0]).toBe('-1,010'); + expect(labels[labels.length - 1]).toBe('1,010'); }); it('Should use min, max and stepSize to create fixed spaced ticks', function() { @@ -574,7 +574,7 @@ describe('Linear Scale', function() { expect(chart.scales.y).not.toEqual(undefined); // must construct expect(chart.scales.y.min).toBe(1); expect(chart.scales.y.max).toBe(11); - expect(getLabels(chart.scales.y)).toEqual(['11', '9', '7', '5', '3', '1']); + expect(getLabels(chart.scales.y)).toEqual(['1', '3', '5', '7', '9', '11']); }); it('Should create decimal steps if stepSize is a decimal number', function() { @@ -602,7 +602,7 @@ describe('Linear Scale', function() { expect(chart.scales.y).not.toEqual(undefined); // must construct expect(chart.scales.y.min).toBe(0); expect(chart.scales.y.max).toBe(10); - expect(getLabels(chart.scales.y)).toEqual(['10', '7.5', '5', '2.5', '0']); + expect(getLabels(chart.scales.y)).toEqual(['0', '2.5', '5', '7.5', '10']); }); describe('precision', function() { @@ -631,7 +631,7 @@ describe('Linear Scale', function() { expect(chart.scales.y).not.toEqual(undefined); // must construct expect(chart.scales.y.min).toBe(0); expect(chart.scales.y.max).toBe(2); - expect(getLabels(chart.scales.y)).toEqual(['2', '1', '0']); + expect(getLabels(chart.scales.y)).toEqual(['0', '1', '2']); }); it('Should round the step size to the given number of decimal places', function() { @@ -659,7 +659,7 @@ describe('Linear Scale', function() { expect(chart.scales.y).not.toEqual(undefined); // must construct expect(chart.scales.y.min).toBe(0); expect(chart.scales.y.max).toBe(0.01); - expect(getLabels(chart.scales.y)).toEqual(['0.01', '0']); + expect(getLabels(chart.scales.y)).toEqual(['0', '0.01']); }); }); @@ -685,19 +685,19 @@ describe('Linear Scale', function() { }); expect(chart.scales.y).not.toEqual(undefined); // must construct - expect(getLabels(chart.scales.y)).toEqual(['50', '45', '40', '35', '30', '25', '20']); + expect(getLabels(chart.scales.y)).toEqual(['20', '25', '30', '35', '40', '45', '50']); chart.scales.y.options.beginAtZero = true; chart.update(); - expect(getLabels(chart.scales.y)).toEqual(['50', '45', '40', '35', '30', '25', '20', '15', '10', '5', '0']); + expect(getLabels(chart.scales.y)).toEqual(['0', '5', '10', '15', '20', '25', '30', '35', '40', '45', '50']); chart.data.datasets[0].data = [-20, -30, -40, -50]; chart.update(); - expect(getLabels(chart.scales.y)).toEqual(['0', '-5', '-10', '-15', '-20', '-25', '-30', '-35', '-40', '-45', '-50']); + expect(getLabels(chart.scales.y)).toEqual(['-50', '-45', '-40', '-35', '-30', '-25', '-20', '-15', '-10', '-5', '0']); chart.scales.y.options.beginAtZero = false; chart.update(); - expect(getLabels(chart.scales.y)).toEqual(['-20', '-25', '-30', '-35', '-40', '-45', '-50']); + expect(getLabels(chart.scales.y)).toEqual(['-50', '-45', '-40', '-35', '-30', '-25', '-20']); }); it('Should generate tick marks in the correct order in reversed mode', function() { @@ -720,7 +720,7 @@ describe('Linear Scale', function() { } }); - expect(getLabels(chart.scales.y)).toEqual(['0', '10', '20', '30', '40', '50', '60', '70', '80']); + expect(getLabels(chart.scales.y)).toEqual(['80', '70', '60', '50', '40', '30', '20', '10', '0']); expect(chart.scales.y.start).toBe(80); expect(chart.scales.y.end).toBe(0); }); @@ -743,7 +743,7 @@ describe('Linear Scale', function() { } } }); - expect(getLabels(chart.scales.y)).toEqual(['0.06', '0.05', '0.04', '0.03', '0.02', '0.01', '0']); + expect(getLabels(chart.scales.y)).toEqual(['0', '0.01', '0.02', '0.03', '0.04', '0.05', '0.06']); }); it('Should correctly limit the maximum number of ticks', function() { @@ -764,33 +764,33 @@ describe('Linear Scale', function() { } }); - expect(getLabels(chart.scales.y)).toEqual(['2.5', '2.0', '1.5', '1.0', '0.5']); + expect(getLabels(chart.scales.y)).toEqual(['0.5', '1.0', '1.5', '2.0', '2.5']); chart.options.scales.y.ticks.maxTicksLimit = 11; chart.update(); - expect(getLabels(chart.scales.y)).toEqual(['2.5', '2.0', '1.5', '1.0', '0.5']); + expect(getLabels(chart.scales.y)).toEqual(['0.5', '1.0', '1.5', '2.0', '2.5']); chart.options.scales.y.ticks.maxTicksLimit = 21; chart.update(); expect(getLabels(chart.scales.y)).toEqual([ - '2.5', '2.4', '2.3', '2.2', '2.1', '2.0', '1.9', '1.8', '1.7', '1.6', - '1.5', '1.4', '1.3', '1.2', '1.1', '1.0', '0.9', '0.8', '0.7', '0.6', - '0.5' + '0.5', + '0.6', '0.7', '0.8', '0.9', '1.0', '1.1', '1.2', '1.3', '1.4', '1.5', + '1.6', '1.7', '1.8', '1.9', '2.0', '2.1', '2.2', '2.3', '2.4', '2.5' ]); chart.options.scales.y.ticks.maxTicksLimit = 11; chart.options.scales.y.ticks.stepSize = 0.01; chart.update(); - expect(getLabels(chart.scales.y)).toEqual(['2.5', '2.0', '1.5', '1.0', '0.5']); + expect(getLabels(chart.scales.y)).toEqual(['0.5', '1.0', '1.5', '2.0', '2.5']); chart.options.scales.y.min = 0.3; chart.options.scales.y.max = 2.8; chart.update(); - expect(getLabels(chart.scales.y)).toEqual(['2.8', '2.3', '1.8', '1.3', '0.8', '0.3']); + expect(getLabels(chart.scales.y)).toEqual(['0.3', '0.8', '1.3', '1.8', '2.3', '2.8']); }); it('Should build labels using the user supplied callback', function() { -- 2.47.3