mirror of
https://github.com/chartjs/Chart.js.git
synced 2026-03-10 18:26:52 +01:00
Fix automatic min value of stacked scale. (#6851)
This commit is contained in:
committed by
Evert Timberg
parent
f34d349328
commit
d60f634ff0
@@ -648,6 +648,10 @@ helpers.extend(DatasetController.prototype, {
|
||||
keys: indices,
|
||||
values: parsed._stacks[scale.id]
|
||||
};
|
||||
// Need to consider individual stack values for data range,
|
||||
// in addition to the stacked value
|
||||
min = Math.min(min, value);
|
||||
max = Math.max(max, value);
|
||||
value = applyStack(stack, value, meta.index, true);
|
||||
}
|
||||
min = Math.min(min, value);
|
||||
|
||||
36
test/fixtures/controller.bar/stacking/logarithmic-strings.js
vendored
Normal file
36
test/fixtures/controller.bar/stacking/logarithmic-strings.js
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
module.exports = {
|
||||
config: {
|
||||
type: 'bar',
|
||||
data: {
|
||||
datasets: [{
|
||||
data: ['10', '100', '10', '100'],
|
||||
backgroundColor: '#ff0000'
|
||||
}, {
|
||||
data: ['100', '10', '0', '100'],
|
||||
backgroundColor: '#00ff00'
|
||||
}],
|
||||
labels: ['label1', 'label2', 'label3', 'label4']
|
||||
},
|
||||
options: {
|
||||
legend: false,
|
||||
title: false,
|
||||
datasets: {
|
||||
bar: {
|
||||
barPercentage: 1,
|
||||
}
|
||||
},
|
||||
scales: {
|
||||
x: {
|
||||
type: 'category',
|
||||
display: false,
|
||||
stacked: true,
|
||||
},
|
||||
y: {
|
||||
type: 'logarithmic',
|
||||
display: false,
|
||||
stacked: true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
BIN
test/fixtures/controller.bar/stacking/logarithmic-strings.png
vendored
Normal file
BIN
test/fixtures/controller.bar/stacking/logarithmic-strings.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 13 KiB |
36
test/fixtures/controller.bar/stacking/logarithmic.js
vendored
Normal file
36
test/fixtures/controller.bar/stacking/logarithmic.js
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
module.exports = {
|
||||
config: {
|
||||
type: 'bar',
|
||||
data: {
|
||||
datasets: [{
|
||||
data: [10, 100, 10, 100],
|
||||
backgroundColor: '#ff0000'
|
||||
}, {
|
||||
data: [100, 10, 0, 100],
|
||||
backgroundColor: '#00ff00'
|
||||
}],
|
||||
labels: ['label1', 'label2', 'label3', 'label4']
|
||||
},
|
||||
options: {
|
||||
legend: false,
|
||||
title: false,
|
||||
datasets: {
|
||||
bar: {
|
||||
barPercentage: 1,
|
||||
}
|
||||
},
|
||||
scales: {
|
||||
x: {
|
||||
type: 'category',
|
||||
display: false,
|
||||
stacked: true,
|
||||
},
|
||||
y: {
|
||||
type: 'logarithmic',
|
||||
display: false,
|
||||
stacked: true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
BIN
test/fixtures/controller.bar/stacking/logarithmic.png
vendored
Normal file
BIN
test/fixtures/controller.bar/stacking/logarithmic.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 13 KiB |
@@ -1179,136 +1179,6 @@ describe('Chart.controllers.bar', function() {
|
||||
});
|
||||
});
|
||||
|
||||
it('should update elements when the scales are stacked and the y axis is logarithmic', function() {
|
||||
var chart = window.acquireChart({
|
||||
type: 'bar',
|
||||
data: {
|
||||
datasets: [{
|
||||
data: [10, 100, 10, 100],
|
||||
label: 'dataset1'
|
||||
}, {
|
||||
data: [100, 10, 0, 100],
|
||||
label: 'dataset2'
|
||||
}],
|
||||
labels: ['label1', 'label2', 'label3', 'label4']
|
||||
},
|
||||
options: {
|
||||
legend: false,
|
||||
title: false,
|
||||
datasets: {
|
||||
bar: {
|
||||
barPercentage: 1,
|
||||
}
|
||||
},
|
||||
scales: {
|
||||
x: {
|
||||
type: 'category',
|
||||
display: false,
|
||||
stacked: true,
|
||||
},
|
||||
y: {
|
||||
type: 'logarithmic',
|
||||
display: false,
|
||||
stacked: true
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
var meta0 = chart.getDatasetMeta(0);
|
||||
|
||||
[
|
||||
{b: 512, w: 102, x: 64, y: 512},
|
||||
{b: 512, w: 102, x: 192, y: 118},
|
||||
{b: 512, w: 102, x: 320, y: 512},
|
||||
{b: 512, w: 102, x: 449, y: 118}
|
||||
].forEach(function(values, i) {
|
||||
expect(meta0.data[i]._model.base).toBeCloseToPixel(values.b);
|
||||
expect(meta0.data[i]._model.width).toBeCloseToPixel(values.w);
|
||||
expect(meta0.data[i]._model.x).toBeCloseToPixel(values.x);
|
||||
expect(meta0.data[i]._model.y).toBeCloseToPixel(values.y);
|
||||
});
|
||||
|
||||
var meta1 = chart.getDatasetMeta(1);
|
||||
|
||||
[
|
||||
{b: 512, w: 102, x: 64, y: 102},
|
||||
{b: 118, w: 102, x: 192, y: 102},
|
||||
{b: 512, w: 102, x: 320, y: 512},
|
||||
{b: 118, w: 102, x: 449, y: 0}
|
||||
].forEach(function(values, i) {
|
||||
expect(meta1.data[i]._model.base).toBeCloseToPixel(values.b);
|
||||
expect(meta1.data[i]._model.width).toBeCloseToPixel(values.w);
|
||||
expect(meta1.data[i]._model.x).toBeCloseToPixel(values.x);
|
||||
expect(meta1.data[i]._model.y).toBeCloseToPixel(values.y);
|
||||
});
|
||||
});
|
||||
|
||||
it('should update elements when the scales are stacked and the y axis is logarithmic and data is strings', function() {
|
||||
var chart = window.acquireChart({
|
||||
type: 'bar',
|
||||
data: {
|
||||
datasets: [{
|
||||
data: ['10', '100', '10', '100'],
|
||||
label: 'dataset1'
|
||||
}, {
|
||||
data: ['100', '10', '0', '100'],
|
||||
label: 'dataset2'
|
||||
}],
|
||||
labels: ['label1', 'label2', 'label3', 'label4']
|
||||
},
|
||||
options: {
|
||||
legend: false,
|
||||
title: false,
|
||||
datasets: {
|
||||
bar: {
|
||||
barPercentage: 1,
|
||||
}
|
||||
},
|
||||
scales: {
|
||||
x: {
|
||||
type: 'category',
|
||||
display: false,
|
||||
stacked: true,
|
||||
},
|
||||
y: {
|
||||
type: 'logarithmic',
|
||||
display: false,
|
||||
stacked: true
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
var meta0 = chart.getDatasetMeta(0);
|
||||
|
||||
[
|
||||
{b: 512, w: 102, x: 64, y: 512},
|
||||
{b: 512, w: 102, x: 192, y: 118},
|
||||
{b: 512, w: 102, x: 320, y: 512},
|
||||
{b: 512, w: 102, x: 449, y: 118}
|
||||
].forEach(function(values, i) {
|
||||
expect(meta0.data[i]._model.base).toBeCloseToPixel(values.b);
|
||||
expect(meta0.data[i]._model.width).toBeCloseToPixel(values.w);
|
||||
expect(meta0.data[i]._model.x).toBeCloseToPixel(values.x);
|
||||
expect(meta0.data[i]._model.y).toBeCloseToPixel(values.y);
|
||||
});
|
||||
|
||||
var meta1 = chart.getDatasetMeta(1);
|
||||
|
||||
[
|
||||
{b: 512, w: 102, x: 64, y: 102},
|
||||
{b: 118, w: 102, x: 192, y: 102},
|
||||
{b: 512, w: 102, x: 320, y: 512},
|
||||
{b: 118, w: 102, x: 449, y: 0}
|
||||
].forEach(function(values, i) {
|
||||
expect(meta1.data[i]._model.base).toBeCloseToPixel(values.b);
|
||||
expect(meta1.data[i]._model.width).toBeCloseToPixel(values.w);
|
||||
expect(meta1.data[i]._model.x).toBeCloseToPixel(values.x);
|
||||
expect(meta1.data[i]._model.y).toBeCloseToPixel(values.y);
|
||||
});
|
||||
});
|
||||
|
||||
it('should draw all bars', function() {
|
||||
var chart = window.acquireChart({
|
||||
type: 'bar',
|
||||
|
||||
@@ -259,7 +259,7 @@ describe('Logarithmic Scale tests', function() {
|
||||
chart.options.scales.y.stacked = true;
|
||||
chart.update();
|
||||
|
||||
expect(chart.scales.y.min).toBe(10);
|
||||
expect(chart.scales.y.min).toBe(1);
|
||||
expect(chart.scales.y.max).toBe(6000);
|
||||
|
||||
expect(chart.scales.y1).not.toEqual(undefined); // must construct
|
||||
@@ -369,7 +369,7 @@ describe('Logarithmic Scale tests', function() {
|
||||
}
|
||||
});
|
||||
|
||||
expect(chart.scales.y.min).toBe(10);
|
||||
expect(chart.scales.y.min).toBe(1);
|
||||
expect(chart.scales.y.max).toBe(200);
|
||||
});
|
||||
|
||||
@@ -411,7 +411,7 @@ describe('Logarithmic Scale tests', function() {
|
||||
}
|
||||
});
|
||||
|
||||
expect(chart.scales.y.min).toBe(10);
|
||||
expect(chart.scales.y.min).toBe(1);
|
||||
expect(chart.scales.y.max).toBe(200);
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user