Skip to content

Commit

Permalink
If tick options have min, max and stepSize use them to generate evenl…
Browse files Browse the repository at this point in the history
…y spaced ticks
  • Loading branch information
fewstera committed Oct 4, 2016
1 parent 0373556 commit 2ddcb6d
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 1 deletion.
11 changes: 10 additions & 1 deletion src/core/core.ticks.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
32 changes: 32 additions & 0 deletions test/scale.linear.tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down

0 comments on commit 2ddcb6d

Please sign in to comment.