From: Aidan Fewster Date: Tue, 4 Oct 2016 10:53:55 +0000 (+0100) Subject: If tick options have min, max and stepSize use them to generate evenly spaced ticks X-Git-Tag: v2.4.0~1^2~34 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=365bdbb3467eb675f4a0353c422f853058348d2e;p=thirdparty%2FChart.js.git If tick options have min, max and stepSize use them to generate evenly spaced ticks --- diff --git a/src/core/core.ticks.js b/src/core/core.ticks.js index f55b8d40e..78ec07c3b 100644 --- a/src/core/core.ticks.js +++ b/src/core/core.ticks.js @@ -64,8 +64,17 @@ module.exports = function(Chart) { } var niceMin = Math.floor(dataRange.min / spacing) * spacing; var niceMax = Math.ceil(dataRange.max / spacing) * spacing; - var numSpaces = (niceMax - niceMin) / spacing; + // If min, max and stepSize is set and they make an evenly spaced scale use it. + if (generationOptions.min && generationOptions.max && generationOptions.stepSize) { + var minMaxDeltaDivisableByStepSize = ((generationOptions.max - generationOptions.min) % generationOptions.stepSize) === 0; + if (minMaxDeltaDivisableByStepSize) { + niceMin = generationOptions.min; + niceMax = generationOptions.max; + } + } + + var numSpaces = (niceMax - niceMin) / spacing; // If very close to our rounded value, use it. if (helpers.almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) { numSpaces = Math.round(numSpaces); diff --git a/test/scale.linear.tests.js b/test/scale.linear.tests.js index 3df773258..4eb585a7b 100644 --- a/test/scale.linear.tests.js +++ b/test/scale.linear.tests.js @@ -486,6 +486,38 @@ describe('Linear Scale', function() { expect(chart.scales.yScale0.ticks[chart.scales.yScale0.ticks.length - 1]).toBe('-1010'); }); + it('Should use min, max and stepSize to create fixed spaced ticks', function() { + var chart = window.acquireChart({ + type: 'bar', + data: { + datasets: [{ + yAxisID: 'yScale0', + data: [10, 3, 6, 8, 3, 1] + }], + labels: ['a', 'b', 'c', 'd', 'e', 'f'] + }, + options: { + scales: { + yAxes: [{ + id: 'yScale0', + type: 'linear', + ticks: { + min: 1, + max: 11, + stepSize: 2 + } + }] + } + } + }); + + expect(chart.scales.yScale0).not.toEqual(undefined); // must construct + expect(chart.scales.yScale0.min).toBe(1); + expect(chart.scales.yScale0.max).toBe(11); + expect(chart.scales.yScale0.ticks).toEqual(['11', '9', '7', '5', '3', '1']); + }); + + it('should forcibly include 0 in the range if the beginAtZero option is used', function() { var chart = window.acquireChart({ type: 'bar',