From d60f634ff00bc89d7a86f577233896d8f91918f2 Mon Sep 17 00:00:00 2001 From: Jukka Kurkela Date: Thu, 19 Dec 2019 21:58:23 +0200 Subject: [PATCH] Fix automatic `min` value of `stacked` scale. (#6851) --- src/core/core.datasetController.js | 4 + .../stacking/logarithmic-strings.js | 36 +++++ .../stacking/logarithmic-strings.png | Bin 0 -> 13028 bytes .../controller.bar/stacking/logarithmic.js | 36 +++++ .../controller.bar/stacking/logarithmic.png | Bin 0 -> 13028 bytes test/specs/controller.bar.tests.js | 130 ------------------ test/specs/scale.logarithmic.tests.js | 6 +- 7 files changed, 79 insertions(+), 133 deletions(-) create mode 100644 test/fixtures/controller.bar/stacking/logarithmic-strings.js create mode 100644 test/fixtures/controller.bar/stacking/logarithmic-strings.png create mode 100644 test/fixtures/controller.bar/stacking/logarithmic.js create mode 100644 test/fixtures/controller.bar/stacking/logarithmic.png 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 0000000000000000000000000000000000000000..2ce8d067c458a4be66699401fafcb1be23e5feb9 GIT binary patch literal 13028 zc-rmSTTl~M90u_JF2q0-BX_mMP>BZ7@lxyvDNRxhhB!8$V)0T~S}j;@OX^5L3}$sK zn(Bz4Z3z%Vtu6INR7M9yOavTt0gaH*7(-0Vc6sbfpMB}snKL`zd}rsJ zGr!%pRi()!L9D4P00@$%h*tvOFg60l(YNP?_g(@-gH-%}dSTX3#knqxF^Iw0P`kOM zm)zVsw>kMzKx1&6y&>r5gHPJdeLuN6G4iA99REk}u}vM+U%kqZL!>`9dY5pq$unRb zaJXMc1kS32U4)Pj=*#Men>TjO#sX7BxNrf+s7X}NBP#bW{fK?xSQem+GRi2U{J+ds zNl;MUCl0swlDauH=?|rV5Kx)LdbiFJID(wp{#&J!) z$Px>I7XA04UyK-)JAHrOwrQ1j`1;2@yJwzOPg(P{N?XDCmd<5{SGEs)k{1Lv*zSrrH@MUxuXAMPR>ngtBWPdt)ujjwLvYIQ23S zwnmcl8A*2)rr}eo;pN*>*&eoNYr>AER1rOYl1-1NX?W9Q^!a7sCO`R8ryxf|;%5&Q z-UYgwf9=nVQ}F!L^6CH%*(ZNdq$TP3Z}lh{HT=}1YMd<7#2J{Td)DGMKE}w78aa;9 zUH0xq-G|uVZEj+)0B)I|IR*4f&R=qcVu|vP7A7zt=H1mK+i=3@smRA!2EIk=M|TGQ z0^$sQ=LhN5=?W-sd1x)h>G>svR5qyvl%+j@Fi0F!|vLTmiDCo*Sn_)1W&zb*hQ(W;S>>hm%*Amxr4D z4!zltWuv>3@vR;mqz|a}u7dgJS20GRx~QpiEw2Vn#~fW~pu6RA*ZnvsR&#mH%;?1G zrXIRW&)tW>5EueOUAut4nzz`S$LtqFDfgvyihQJUQ0z+U3?Dc}lH0%O^5bfB% z00<9#Z3qm3Aut4nzz`S$LtqFDfgvyihQJUQ0{btpQig$J;A)-gynZ#IYT=BCS3TaJ z8myISWhS?4m)yq^Ez~-5MwuesN{Br-=<4TO&os7qtitZ{i2Q(>IP3y78Rm!k}%y@@xKbJqLgTVIn j*Y`}IU{K70*LGBjIaK<)B{x!c1n5heEECr)&ffhGjF-;F literal 0 Hc-jL100001 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 0000000000000000000000000000000000000000..2ce8d067c458a4be66699401fafcb1be23e5feb9 GIT binary patch literal 13028 zc-rmSTTl~M90u_JF2q0-BX_mMP>BZ7@lxyvDNRxhhB!8$V)0T~S}j;@OX^5L3}$sK zn(Bz4Z3z%Vtu6INR7M9yOavTt0gaH*7(-0Vc6sbfpMB}snKL`zd}rsJ zGr!%pRi()!L9D4P00@$%h*tvOFg60l(YNP?_g(@-gH-%}dSTX3#knqxF^Iw0P`kOM zm)zVsw>kMzKx1&6y&>r5gHPJdeLuN6G4iA99REk}u}vM+U%kqZL!>`9dY5pq$unRb zaJXMc1kS32U4)Pj=*#Men>TjO#sX7BxNrf+s7X}NBP#bW{fK?xSQem+GRi2U{J+ds zNl;MUCl0swlDauH=?|rV5Kx)LdbiFJID(wp{#&J!) z$Px>I7XA04UyK-)JAHrOwrQ1j`1;2@yJwzOPg(P{N?XDCmd<5{SGEs)k{1Lv*zSrrH@MUxuXAMPR>ngtBWPdt)ujjwLvYIQ23S zwnmcl8A*2)rr}eo;pN*>*&eoNYr>AER1rOYl1-1NX?W9Q^!a7sCO`R8ryxf|;%5&Q z-UYgwf9=nVQ}F!L^6CH%*(ZNdq$TP3Z}lh{HT=}1YMd<7#2J{Td)DGMKE}w78aa;9 zUH0xq-G|uVZEj+)0B)I|IR*4f&R=qcVu|vP7A7zt=H1mK+i=3@smRA!2EIk=M|TGQ z0^$sQ=LhN5=?W-sd1x)h>G>svR5qyvl%+j@Fi0F!|vLTmiDCo*Sn_)1W&zb*hQ(W;S>>hm%*Amxr4D z4!zltWuv>3@vR;mqz|a}u7dgJS20GRx~QpiEw2Vn#~fW~pu6RA*ZnvsR&#mH%;?1G zrXIRW&)tW>5EueOUAut4nzz`S$LtqFDfgvyihQJUQ0z+U3?Dc}lH0%O^5bfB% z00<9#Z3qm3Aut4nzz`S$LtqFDfgvyihQJUQ0{btpQig$J;A)-gynZ#IYT=BCS3TaJ z8myISWhS?4m)yq^Ez~-5MwuesN{Br-=<4TO&os7qtitZ{i2Q(>IP3y78Rm!k}%y@@xKbJqLgTVIn j*Y`}IU{K70*LGBjIaK<)B{x!c1n5heEECr)&ffhGjF-;F literal 0 Hc-jL100001 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); }); -- 2.47.2