From: Jukka Kurkela Date: Thu, 19 Dec 2019 19:58:23 +0000 (+0200) Subject: Fix automatic `min` value of `stacked` scale. (#6851) X-Git-Tag: v3.0.0-alpha~188 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d60f634ff00bc89d7a86f577233896d8f91918f2;p=thirdparty%2FChart.js.git Fix automatic `min` value of `stacked` scale. (#6851) --- diff --git a/src/core/core.datasetController.js b/src/core/core.datasetController.js index f8e39b482..7ce9c0d66 100644 --- a/src/core/core.datasetController.js +++ b/src/core/core.datasetController.js @@ -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); diff --git a/test/fixtures/controller.bar/stacking/logarithmic-strings.js b/test/fixtures/controller.bar/stacking/logarithmic-strings.js new file mode 100644 index 000000000..e23a01c63 --- /dev/null +++ b/test/fixtures/controller.bar/stacking/logarithmic-strings.js @@ -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 + } + } + } + } +}; diff --git a/test/fixtures/controller.bar/stacking/logarithmic-strings.png b/test/fixtures/controller.bar/stacking/logarithmic-strings.png new file mode 100644 index 000000000..2ce8d067c Binary files /dev/null and b/test/fixtures/controller.bar/stacking/logarithmic-strings.png differ diff --git a/test/fixtures/controller.bar/stacking/logarithmic.js b/test/fixtures/controller.bar/stacking/logarithmic.js new file mode 100644 index 000000000..34e0c6c9a --- /dev/null +++ b/test/fixtures/controller.bar/stacking/logarithmic.js @@ -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 + } + } + } + } +}; diff --git a/test/fixtures/controller.bar/stacking/logarithmic.png b/test/fixtures/controller.bar/stacking/logarithmic.png new file mode 100644 index 000000000..2ce8d067c Binary files /dev/null and b/test/fixtures/controller.bar/stacking/logarithmic.png differ diff --git a/test/specs/controller.bar.tests.js b/test/specs/controller.bar.tests.js index 76314b463..e6d199452 100644 --- a/test/specs/controller.bar.tests.js +++ b/test/specs/controller.bar.tests.js @@ -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', diff --git a/test/specs/scale.logarithmic.tests.js b/test/specs/scale.logarithmic.tests.js index 5c0fa9cdc..23e41d513 100644 --- a/test/specs/scale.logarithmic.tests.js +++ b/test/specs/scale.logarithmic.tests.js @@ -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); });