Fix automatic min value of stacked scale. (#6851)

This commit is contained in:
Jukka Kurkela
2019-12-19 21:58:23 +02:00
committed by Evert Timberg
parent f34d349328
commit d60f634ff0
7 changed files with 79 additions and 133 deletions

View File

@@ -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);

View 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
}
}
}
}
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View 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
}
}
}
}
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -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',

View File

@@ -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);
});