mirror of
https://github.com/chartjs/Chart.js.git
synced 2025-12-08 20:36:08 +00:00
Enable bounds option to all cartesian axes (#8060)
This commit is contained in:
parent
0c515c0e67
commit
a35dade663
@ -17,6 +17,15 @@ defaults.set('scale', {
|
||||
reverse: false,
|
||||
beginAtZero: false,
|
||||
|
||||
/**
|
||||
* Scale boundary strategy (bypassed by min/max time options)
|
||||
* - `data`: make sure data are fully visible, ticks outside are removed
|
||||
* - `ticks`: make sure ticks are fully visible, data outside are truncated
|
||||
* @see https://github.com/chartjs/Chart.js/pull/4556
|
||||
* @since 3.0.0
|
||||
*/
|
||||
bounds: 'ticks',
|
||||
|
||||
// grid line settings
|
||||
gridLines: {
|
||||
display: true,
|
||||
|
||||
@ -27,10 +27,20 @@ export default class CategoryScale extends Scale {
|
||||
|
||||
determineDataLimits() {
|
||||
const me = this;
|
||||
const max = me.getLabels().length - 1;
|
||||
const {minDefined, maxDefined} = me.getUserBounds();
|
||||
let {min, max} = me.getMinMax(true);
|
||||
|
||||
me.min = Math.max(me._userMin || 0, 0);
|
||||
me.max = Math.min(me._userMax || max, max);
|
||||
if (me.options.bounds === 'ticks') {
|
||||
if (!minDefined) {
|
||||
min = 0;
|
||||
}
|
||||
if (!maxDefined) {
|
||||
max = me.getLabels().length - 1;
|
||||
}
|
||||
}
|
||||
|
||||
me.min = min;
|
||||
me.max = max;
|
||||
}
|
||||
|
||||
buildTicks() {
|
||||
|
||||
@ -203,9 +203,11 @@ export default class LinearScaleBase extends Scale {
|
||||
};
|
||||
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
|
||||
_setMinAndMaxByKey(ticks, me, 'value');
|
||||
// At this point, we need to update our max and min given the tick values,
|
||||
// since we probably have expanded the range of the scale
|
||||
if (opts.bounds === 'ticks') {
|
||||
_setMinAndMaxByKey(ticks, me, 'value');
|
||||
}
|
||||
|
||||
if (opts.reverse) {
|
||||
ticks.reverse();
|
||||
|
||||
@ -124,9 +124,11 @@ export default class LogarithmicScale extends Scale {
|
||||
};
|
||||
const ticks = generateTicks(generationOptions, 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
|
||||
_setMinAndMaxByKey(ticks, me, 'value');
|
||||
// At this point, we need to update our max and min given the tick values,
|
||||
// since we probably have expanded the range of the scale
|
||||
if (opts.bounds === 'ticks') {
|
||||
_setMinAndMaxByKey(ticks, me, 'value');
|
||||
}
|
||||
|
||||
if (opts.reverse) {
|
||||
ticks.reverse();
|
||||
|
||||
@ -475,4 +475,33 @@ describe('Category scale tests', function() {
|
||||
expect(yScale.getPixelForValue(3)).toBeCloseToPixel(426);
|
||||
expect(yScale.getPixelForValue(4)).toBeCloseToPixel(538);
|
||||
});
|
||||
|
||||
it('Should bound to ticks/data', function() {
|
||||
var chart = window.acquireChart({
|
||||
type: 'line',
|
||||
data: {
|
||||
labels: ['a', 'b', 'c', 'd'],
|
||||
datasets: [{
|
||||
data: {b: 1, c: 99}
|
||||
}]
|
||||
},
|
||||
options: {
|
||||
scales: {
|
||||
x: {
|
||||
type: 'category',
|
||||
bounds: 'data'
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
expect(chart.scales.x.min).toEqual(1);
|
||||
expect(chart.scales.x.max).toEqual(2);
|
||||
|
||||
chart.options.scales.x.bounds = 'ticks';
|
||||
chart.update();
|
||||
|
||||
expect(chart.scales.x.min).toEqual(0);
|
||||
expect(chart.scales.x.max).toEqual(3);
|
||||
});
|
||||
});
|
||||
|
||||
@ -759,6 +759,28 @@ describe('Linear Scale', function() {
|
||||
expect(getLabels(chart.scales.y)).toEqual(['0.3', '0.8', '1.3', '1.8', '2.3', '2.8']);
|
||||
});
|
||||
|
||||
it('Should bound to data', function() {
|
||||
var chart = window.acquireChart({
|
||||
type: 'line',
|
||||
data: {
|
||||
labels: ['a', 'b'],
|
||||
datasets: [{
|
||||
data: [1, 99]
|
||||
}]
|
||||
},
|
||||
options: {
|
||||
scales: {
|
||||
y: {
|
||||
bounds: 'data'
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
expect(chart.scales.y.min).toEqual(1);
|
||||
expect(chart.scales.y.max).toEqual(99);
|
||||
});
|
||||
|
||||
it('Should build labels using the user supplied callback', function() {
|
||||
var chart = window.acquireChart({
|
||||
type: 'bar',
|
||||
|
||||
@ -1142,4 +1142,27 @@ describe('Logarithmic Scale tests', function() {
|
||||
expect(chart.scales.y.min).toBe(10);
|
||||
expect(chart.scales.y.max).toBe(100);
|
||||
});
|
||||
|
||||
it('Should bound to data', function() {
|
||||
var chart = window.acquireChart({
|
||||
type: 'line',
|
||||
data: {
|
||||
labels: ['a', 'b'],
|
||||
datasets: [{
|
||||
data: [1.1, 99]
|
||||
}]
|
||||
},
|
||||
options: {
|
||||
scales: {
|
||||
y: {
|
||||
type: 'logarithmic',
|
||||
bounds: 'data'
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
expect(chart.scales.y.min).toEqual(1.1);
|
||||
expect(chart.scales.y.max).toEqual(99);
|
||||
});
|
||||
});
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user