From 097bc78f0c5c24959df6c8175cf74fea7f36c6be Mon Sep 17 00:00:00 2001 From: archmoj Date: Tue, 28 Jan 2020 10:27:12 -0500 Subject: [PATCH 1/4] fix 4499 - do not display empty bars --- src/traces/bar/plot.js | 14 +- test/image/baselines/bar_hide_nulls.png | Bin 0 -> 34683 bytes test/image/mocks/bar_hide_nulls.json | 180 ++++++++++++++++++++++++ test/jasmine/tests/bar_test.js | 34 +++++ 4 files changed, 223 insertions(+), 5 deletions(-) create mode 100644 test/image/baselines/bar_hide_nulls.png create mode 100644 test/image/mocks/bar_hide_nulls.json diff --git a/src/traces/bar/plot.js b/src/traces/bar/plot.js index 78728914a92..8990f4af164 100644 --- a/src/traces/bar/plot.js +++ b/src/traces/bar/plot.js @@ -147,6 +147,7 @@ function plot(gd, plotinfo, cdModule, traceLayer, opts, makeOnCompleteCallback) !isNumeric(y0) || !isNumeric(y1) ); + // display zeros if line.width > 0 if(isBlank && shouldDisplayZeros && helpers.getLineWidth(trace, di) && (isHorizontal ? x1 - x0 === 0 : y1 - y0 === 0)) { isBlank = false; @@ -190,7 +191,9 @@ function plot(gd, plotinfo, cdModule, traceLayer, opts, makeOnCompleteCallback) d3.round(Math.round(v) - offset, 2) : v; } - function expandToVisible(v, vc) { + function expandToVisible(v, vc, hideZeroHeight) { + if(hideZeroHeight && v === vc) return v; + // if it's not in danger of disappearing entirely, // round more precisely return Math.abs(v - vc) >= 2 ? roundWithLine(v) : @@ -210,10 +213,11 @@ function plot(gd, plotinfo, cdModule, traceLayer, opts, makeOnCompleteCallback) var op = Color.opacity(mc); var fixpx = (op < 1 || lw > 0.01) ? roundWithLine : expandToVisible; - x0 = fixpx(x0, x1); - x1 = fixpx(x1, x0); - y0 = fixpx(y0, y1); - y1 = fixpx(y1, y0); + + x0 = fixpx(x0, x1, isHorizontal); + x1 = fixpx(x1, x0, isHorizontal); + y0 = fixpx(y0, y1, !isHorizontal); + y1 = fixpx(y1, y0, !isHorizontal); } var sel = transition(Lib.ensureSingle(bar, 'path'), fullLayout, opts, makeOnCompleteCallback); diff --git a/test/image/baselines/bar_hide_nulls.png b/test/image/baselines/bar_hide_nulls.png new file mode 100644 index 0000000000000000000000000000000000000000..6aecd672fa005730cc6721a36ae9563634776016 GIT binary patch literal 34683 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 i>Gw|h?| path'); + expect(nodes.length).toBe(12, '# of bars'); + + [ + 0, 1, 3, 4, 6, 7, 9, 10 + ].forEach(function(i) { + var d = nodes[i].getAttribute('d'); + expect(getArea(d)).toBe(0, 'item:' + i); + }); + }) + .catch(failTest) + .then(done); + }); }); describe('bar visibility toggling:', function() { From beb9d8874bde547f75cfa0eaccd35a118c86139f Mon Sep 17 00:00:00 2001 From: archmoj Date: Tue, 28 Jan 2020 15:35:37 -0500 Subject: [PATCH 2/4] rename function argument to hideZeroSpan --- src/traces/bar/plot.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/traces/bar/plot.js b/src/traces/bar/plot.js index 8990f4af164..59c3f6b1b86 100644 --- a/src/traces/bar/plot.js +++ b/src/traces/bar/plot.js @@ -191,8 +191,8 @@ function plot(gd, plotinfo, cdModule, traceLayer, opts, makeOnCompleteCallback) d3.round(Math.round(v) - offset, 2) : v; } - function expandToVisible(v, vc, hideZeroHeight) { - if(hideZeroHeight && v === vc) return v; + function expandToVisible(v, vc, hideZeroSpan) { + if(hideZeroSpan && v === vc) return v; // if it's not in danger of disappearing entirely, // round more precisely From 96ef28a76de609ca11adf475adba59a574ce3e59 Mon Sep 17 00:00:00 2001 From: archmoj Date: Wed, 29 Jan 2020 12:15:36 -0500 Subject: [PATCH 3/4] make the logic easier to digest by declaring spansVertical and spansHorizontal --- src/traces/bar/plot.js | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/traces/bar/plot.js b/src/traces/bar/plot.js index 59c3f6b1b86..aed04eb5dc4 100644 --- a/src/traces/bar/plot.js +++ b/src/traces/bar/plot.js @@ -157,6 +157,9 @@ function plot(gd, plotinfo, cdModule, traceLayer, opts, makeOnCompleteCallback) if(isBlank && isHorizontal) x1 = x0; if(isBlank && !isHorizontal) y1 = y0; + var spansHorizontal = isHorizontal && (x0 !== x1); + var spansVertical = !isHorizontal && (y0 !== y1); + // in waterfall mode `between` we need to adjust bar end points to match the connector width if(adjustPixel && !isBlank) { if(isHorizontal) { @@ -191,9 +194,7 @@ function plot(gd, plotinfo, cdModule, traceLayer, opts, makeOnCompleteCallback) d3.round(Math.round(v) - offset, 2) : v; } - function expandToVisible(v, vc, hideZeroSpan) { - if(hideZeroSpan && v === vc) return v; - + function expandToVisible(v, vc) { // if it's not in danger of disappearing entirely, // round more precisely return Math.abs(v - vc) >= 2 ? roundWithLine(v) : @@ -214,10 +215,14 @@ function plot(gd, plotinfo, cdModule, traceLayer, opts, makeOnCompleteCallback) var op = Color.opacity(mc); var fixpx = (op < 1 || lw > 0.01) ? roundWithLine : expandToVisible; - x0 = fixpx(x0, x1, isHorizontal); - x1 = fixpx(x1, x0, isHorizontal); - y0 = fixpx(y0, y1, !isHorizontal); - y1 = fixpx(y1, y0, !isHorizontal); + if(spansHorizontal) { + x0 = fixpx(x0, x1); + x1 = fixpx(x1, x0); + } + if(spansVertical) { + y0 = fixpx(y0, y1); + y1 = fixpx(y1, y0); + } } var sel = transition(Lib.ensureSingle(bar, 'path'), fullLayout, opts, makeOnCompleteCallback); From b3ee369e4a0330cf968b4c5bdaba6d79264771f9 Mon Sep 17 00:00:00 2001 From: archmoj Date: Wed, 29 Jan 2020 12:50:36 -0500 Subject: [PATCH 4/4] improve test - add tiny bars --- test/image/baselines/bar_hide_nulls.png | Bin 34683 -> 32367 bytes test/image/mocks/bar_hide_nulls.json | 22 ++++++++++++++----- test/jasmine/tests/bar_test.js | 27 +++++++++++++++++++----- 3 files changed, 39 insertions(+), 10 deletions(-) diff --git a/test/image/baselines/bar_hide_nulls.png b/test/image/baselines/bar_hide_nulls.png index 6aecd672fa005730cc6721a36ae9563634776016..6ada4aa9928fa786455020cb2f049f03b78721fa 100644 GIT binary patch literal 32367 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 D>;;M~ literal 34683 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 i>Gw|h?| path'); - expect(nodes.length).toBe(12, '# of bars'); + expect(nodes.length).toBe(16, '# of bars'); [ - 0, 1, 3, 4, 6, 7, 9, 10 - ].forEach(function(i) { + [0, false], + [1, false], + [2, true], + [3, true], + [4, false], + [5, false], + [6, true], + [7, true], + [8, false], + [9, false], + [10, true], + [11, true], + [12, false], + [13, false], + [14, true], + [15, true] + ].forEach(function(e) { + var i = e[0]; var d = nodes[i].getAttribute('d'); - expect(getArea(d)).toBe(0, 'item:' + i); + var visible = e[1]; + expect(getArea(d) > 0).toBe(visible, 'item:' + i); }); }) .catch(failTest)