From b66f60b1846dd5ec7b2ae3de887c9ec723419598 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Fri, 18 Jan 2019 16:37:55 -0500 Subject: [PATCH 1/5] lint in Bar.crossTraceCalc - :hocho: 2-line gaps - consistently call items of `gd.calcdata` -> `calcTraces` in this file! --- src/traces/bar/cross_trace_calc.js | 183 ++++++++++++----------------- 1 file changed, 72 insertions(+), 111 deletions(-) diff --git a/src/traces/bar/cross_trace_calc.js b/src/traces/bar/cross_trace_calc.js index a8d4974fb22..ef4df4d2a90 100644 --- a/src/traces/bar/cross_trace_calc.js +++ b/src/traces/bar/cross_trace_calc.js @@ -6,7 +6,6 @@ * LICENSE file in the root directory of this source tree. */ - 'use strict'; var isNumeric = require('fast-isnumeric'); @@ -43,8 +42,7 @@ function crossTraceCalc(gd, plotinfo) { ) { if(fullTrace.orientation === 'h') { calcTracesHorizontal.push(calcTraces[i]); - } - else { + } else { calcTracesVertical.push(calcTraces[i]); } } @@ -68,8 +66,7 @@ function setGroupPositions(gd, pa, sa, calcTraces) { if(overlay) { setGroupPositionsInOverlayMode(gd, pa, sa, calcTraces); - } - else if(group) { + } else if(group) { // exclude from the group those traces for which the user set an offset excluded = []; included = []; @@ -87,8 +84,7 @@ function setGroupPositions(gd, pa, sa, calcTraces) { if(excluded.length) { setGroupPositionsInOverlayMode(gd, pa, sa, excluded); } - } - else { + } else { // exclude from the stack those traces for which the user set a base excluded = []; included = []; @@ -155,7 +151,6 @@ function initBase(gd, pa, sa, calcTraces) { } } - function setGroupPositionsInOverlayMode(gd, pa, sa, calcTraces) { var barnorm = gd._fullLayout.barnorm; var separateNegativeValues = false; @@ -164,10 +159,7 @@ function setGroupPositionsInOverlayMode(gd, pa, sa, calcTraces) { // update position axis and set bar offsets and widths for(var i = 0; i < calcTraces.length; i++) { var calcTrace = calcTraces[i]; - - var sieve = new Sieve( - [calcTrace], separateNegativeValues, dontMergeOverlappingData - ); + var sieve = new Sieve([calcTrace], separateNegativeValues, dontMergeOverlappingData); // set bar offsets and widths, and update position axis setOffsetAndWidth(gd, pa, sieve); @@ -180,14 +172,12 @@ function setGroupPositionsInOverlayMode(gd, pa, sa, calcTraces) { if(barnorm) { sieveBars(gd, sa, sieve); normalizeBars(gd, sa, sieve); - } - else { + } else { setBaseAndTop(gd, sa, sieve); } } } - function setGroupPositionsInGroupMode(gd, pa, sa, calcTraces) { var fullLayout = gd._fullLayout; var barnorm = fullLayout.barnorm; @@ -202,19 +192,17 @@ function setGroupPositionsInGroupMode(gd, pa, sa, calcTraces) { if(barnorm) { sieveBars(gd, sa, sieve); normalizeBars(gd, sa, sieve); - } - else { + } else { setBaseAndTop(gd, sa, sieve); } } - function setGroupPositionsInStackOrRelativeMode(gd, pa, sa, calcTraces) { var fullLayout = gd._fullLayout; var barmode = fullLayout.barmode; - var stack = (barmode === 'stack'); - var relative = (barmode === 'relative'); - var barnorm = gd._fullLayout.barnorm; + var stack = barmode === 'stack'; + var relative = barmode === 'relative'; + var barnorm = fullLayout.barnorm; var separateNegativeValues = relative; var dontMergeOverlappingData = !(barnorm || stack || relative); var sieve = new Sieve(calcTraces, separateNegativeValues, dontMergeOverlappingData); @@ -232,10 +220,10 @@ function setGroupPositionsInStackOrRelativeMode(gd, pa, sa, calcTraces) { for(var j = 0; j < calcTrace.length; j++) { var bar = calcTrace[j]; - if(bar.s === BADNUM) continue; - - var isOutmostBar = ((bar.b + bar.s) === sieve.get(bar.p, bar.s)); - if(isOutmostBar) bar._outmost = true; + if(bar.s !== BADNUM) { + var isOutmostBar = ((bar.b + bar.s) === sieve.get(bar.p, bar.s)); + if(isOutmostBar) bar._outmost = true; + } } } @@ -244,15 +232,12 @@ function setGroupPositionsInStackOrRelativeMode(gd, pa, sa, calcTraces) { if(barnorm) normalizeBars(gd, sa, sieve); } - function setOffsetAndWidth(gd, pa, sieve) { var fullLayout = gd._fullLayout; var bargap = fullLayout.bargap; var bargroupgap = fullLayout.bargroupgap || 0; var minDiff = sieve.minDiff; var calcTraces = sieve.traces; - var i, calcTrace, calcTrace0; - var t; // set bar offsets and widths var barGroupWidth = minDiff * (1 - bargap); @@ -262,12 +247,11 @@ function setOffsetAndWidth(gd, pa, sieve) { // computer bar group center and bar offset var offsetFromCenter = -barWidth / 2; - for(i = 0; i < calcTraces.length; i++) { - calcTrace = calcTraces[i]; - calcTrace0 = calcTrace[0]; + for(var i = 0; i < calcTraces.length; i++) { + var calcTrace = calcTraces[i]; + var t = calcTrace[0].t; // store bar width and offset for this trace - t = calcTrace0.t; t.barwidth = barWidth; t.poffset = offsetFromCenter; t.bargroupwidth = barGroupWidth; @@ -287,7 +271,6 @@ function setOffsetAndWidth(gd, pa, sieve) { updatePositionAxis(gd, pa, sieve); } - function setOffsetAndWidthInGroupMode(gd, pa, sieve) { var fullLayout = gd._fullLayout; var bargap = fullLayout.bargap; @@ -296,8 +279,6 @@ function setOffsetAndWidthInGroupMode(gd, pa, sieve) { var distinctPositions = sieve.distinctPositions; var minDiff = sieve.minDiff; var calcTraces = sieve.traces; - var i, calcTrace, calcTrace0; - var t; // if there aren't any overlapping positions, // let them have full width even if mode is group @@ -308,17 +289,16 @@ function setOffsetAndWidthInGroupMode(gd, pa, sieve) { var barWidthPlusGap = (overlap) ? barGroupWidth / nTraces : barGroupWidth; var barWidth = barWidthPlusGap * (1 - bargroupgap); - for(i = 0; i < nTraces; i++) { - calcTrace = calcTraces[i]; - calcTrace0 = calcTrace[0]; + for(var i = 0; i < nTraces; i++) { + var calcTrace = calcTraces[i]; + var t = calcTrace[0].t; // computer bar group center and bar offset - var offsetFromCenter = (overlap) ? + var offsetFromCenter = overlap ? ((2 * i + 1 - nTraces) * barWidthPlusGap - barWidth) / 2 : -barWidth / 2; // store bar width and offset for this trace - t = calcTrace0.t; t.barwidth = barWidth; t.poffset = offsetFromCenter; t.bargroupwidth = barGroupWidth; @@ -338,18 +318,15 @@ function setOffsetAndWidthInGroupMode(gd, pa, sieve) { updatePositionAxis(gd, pa, sieve, overlap); } - function applyAttributes(sieve) { var calcTraces = sieve.traces; - var i, j, calcTrace, calcTrace0, fullTrace; - var t; + var i, j; for(i = 0; i < calcTraces.length; i++) { - calcTrace = calcTraces[i]; - calcTrace0 = calcTrace[0]; - fullTrace = calcTrace0.trace; - t = calcTrace0.t; - + var calcTrace = calcTraces[i]; + var calcTrace0 = calcTrace[0]; + var fullTrace = calcTrace0.trace; + var t = calcTrace0.t; var offset = fullTrace._offset || fullTrace.offset; var initialPoffset = t.poffset; var newPoffset; @@ -372,8 +349,7 @@ function applyAttributes(sieve) { } t.poffset = newPoffset; - } - else if(offset !== undefined) { + } else if(offset !== undefined) { t.poffset = offset; } @@ -408,8 +384,7 @@ function applyAttributes(sieve) { } t.poffset = newPoffset; } - } - else if(width !== undefined) { + } else if(width !== undefined) { t.barwidth = width; // if user didn't set offset, @@ -421,7 +396,6 @@ function applyAttributes(sieve) { } } - function setBarCenterAndWidth(gd, pa, sieve) { var calcTraces = sieve.traces; var pLetter = getAxisLetter(pa); @@ -438,17 +412,12 @@ function setBarCenterAndWidth(gd, pa, sieve) { var calcBar = calcTrace[j]; // store the actual bar width and position, for use by hover - var width = calcBar.w = (barwidthIsArray) ? barwidth[j] : barwidth; - calcBar[pLetter] = calcBar.p + - ((poffsetIsArray) ? poffset[j] : poffset) + - width / 2; - - + var width = calcBar.w = barwidthIsArray ? barwidth[j] : barwidth; + calcBar[pLetter] = calcBar.p + (poffsetIsArray ? poffset[j] : poffset) + width / 2; } } } - function updatePositionAxis(gd, pa, sieve, allowMinDtick) { var calcTraces = sieve.traces; var distinctPositions = sieve.distinctPositions; @@ -507,19 +476,19 @@ function expandRange(range, newValue) { else range[1] = newValue; } +// store these bar bases and tops in calcdata +// and make sure the size axis includes zero, +// along with the bases and tops of each bar. function setBaseAndTop(gd, sa, sieve) { - // store these bar bases and tops in calcdata - // and make sure the size axis includes zero, - // along with the bases and tops of each bar. - var traces = sieve.traces; + var calcTraces = sieve.traces; var sLetter = getAxisLetter(sa); var sRange = [null, null]; - for(var i = 0; i < traces.length; i++) { - var trace = traces[i]; + for(var i = 0; i < calcTraces.length; i++) { + var calcTrace = calcTraces[i]; - for(var j = 0; j < trace.length; j++) { - var bar = trace[j]; + for(var j = 0; j < calcTrace.length; j++) { + var bar = calcTrace[j]; var barBase = bar.b; var barTop = barBase + bar.s; @@ -531,25 +500,21 @@ function setBaseAndTop(gd, sa, sieve) { } var extremes = Axes.findExtremes(sa, sRange, {tozero: true, padded: true}); - putExtremes(traces, sa, extremes); + putExtremes(calcTraces, sa, extremes); } - function stackBars(gd, sa, sieve) { var fullLayout = gd._fullLayout; var barnorm = fullLayout.barnorm; var sLetter = getAxisLetter(sa); - var traces = sieve.traces; - var i, trace; - var j, bar; - + var calcTraces = sieve.traces; var sRange = [null, null]; - for(i = 0; i < traces.length; i++) { - trace = traces[i]; + for(var i = 0; i < calcTraces.length; i++) { + var calcTrace = calcTraces[i]; - for(j = 0; j < trace.length; j++) { - bar = trace[j]; + for(var j = 0; j < calcTrace.length; j++) { + var bar = calcTrace[j]; if(bar.s === BADNUM) continue; @@ -571,33 +536,30 @@ function stackBars(gd, sa, sieve) { // if barnorm is set, let normalizeBars update the axis range if(!barnorm) { var extremes = Axes.findExtremes(sa, sRange, {tozero: true, padded: true}); - putExtremes(traces, sa, extremes); + putExtremes(calcTraces, sa, extremes); } } - function sieveBars(gd, sa, sieve) { - var traces = sieve.traces; + var calcTraces = sieve.traces; - for(var i = 0; i < traces.length; i++) { - var trace = traces[i]; + for(var i = 0; i < calcTraces.length; i++) { + var calcTrace = calcTraces[i]; - for(var j = 0; j < trace.length; j++) { - var bar = trace[j]; + for(var j = 0; j < calcTrace.length; j++) { + var bar = calcTrace[j]; if(bar.s !== BADNUM) sieve.put(bar.p, bar.b + bar.s); } } } - +// Note: +// +// normalizeBars requires that either sieveBars or stackBars has been +// previously invoked. function normalizeBars(gd, sa, sieve) { - // Note: - // - // normalizeBars requires that either sieveBars or stackBars has been - // previously invoked. - - var traces = sieve.traces; + var calcTraces = sieve.traces; var sLetter = getAxisLetter(sa); var sTop = (gd._fullLayout.barnorm === 'fraction') ? 1 : 100; var sTiny = sTop / 1e9; // in case of rounding error in sum @@ -615,11 +577,11 @@ function normalizeBars(gd, sa, sieve) { } } - for(var i = 0; i < traces.length; i++) { - var trace = traces[i]; + for(var i = 0; i < calcTraces.length; i++) { + var calcTrace = calcTraces[i]; - for(var j = 0; j < trace.length; j++) { - var bar = trace[j]; + for(var j = 0; j < calcTrace.length; j++) { + var bar = calcTrace[j]; if(bar.s === BADNUM) continue; @@ -638,12 +600,7 @@ function normalizeBars(gd, sa, sieve) { // update range of size axis var extremes = Axes.findExtremes(sa, sRange, {tozero: true, padded: padded}); - putExtremes(traces, sa, extremes); -} - - -function getAxisLetter(ax) { - return ax._id.charAt(0); + putExtremes(calcTraces, sa, extremes); } function putExtremes(cd, ax, extremes) { @@ -658,12 +615,13 @@ function putExtremes(cd, ax, extremes) { // run once per trace group (subplot & direction) and // the same mapping is attached to all calcdata traces function collectExtents(calcTraces, pa) { - var posLetter = pa._id.charAt(0); + var pLetter = getAxisLetter(pa); var extents = {}; + var i, j, cd; + var pMin = Infinity; var pMax = -Infinity; - var i, j, cd; for(i = 0; i < calcTraces.length; i++) { cd = calcTraces[i]; for(j = 0; j < cd.length; j++) { @@ -683,20 +641,19 @@ function collectExtents(calcTraces, pa) { return String(Math.round(roundFactor * (p - pMin))); }; - var poffset, poffsetIsArray; - for(i = 0; i < calcTraces.length; i++) { cd = calcTraces[i]; cd[0].t.extents = extents; - poffset = cd[0].t.poffset; - poffsetIsArray = Array.isArray(poffset); + + var poffset = cd[0].t.poffset; + var poffsetIsArray = Array.isArray(poffset); for(j = 0; j < cd.length; j++) { var di = cd[j]; - var p0 = di[posLetter] - di.w / 2; + var p0 = di[pLetter] - di.w / 2; if(isNumeric(p0)) { - var p1 = di[posLetter] + di.w / 2; + var p1 = di[pLetter] + di.w / 2; var pVal = round(di.p); if(extents[pVal]) { extents[pVal] = [Math.min(p0, extents[pVal][0]), Math.max(p1, extents[pVal][1])]; @@ -705,7 +662,7 @@ function collectExtents(calcTraces, pa) { } } - di.p0 = di.p + ((poffsetIsArray) ? poffset[j] : poffset); + di.p0 = di.p + (poffsetIsArray ? poffset[j] : poffset); di.p1 = di.p0 + di.w; di.s0 = di.b; di.s1 = di.s0 + di.s; @@ -713,6 +670,10 @@ function collectExtents(calcTraces, pa) { } } +function getAxisLetter(ax) { + return ax._id.charAt(0); +} + module.exports = { crossTraceCalc: crossTraceCalc, setGroupPositions: setGroupPositions From cd82044bedd463516de0722e8f78e3feb8dcbb9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Mon, 21 Jan 2019 13:58:58 -0500 Subject: [PATCH 2/5] fixes #3029 - add ref to findExtremes opts in its return object ... and use that option to inherit `tozero` for errorbar findExtremes() call. Update to exiting mocks that were showing wrong behavior. --- src/components/errorbars/calc.js | 14 ++++++---- src/plots/cartesian/autorange.js | 25 +++++++++++------- .../baselines/bar_errorbars_inherit_color.png | Bin 28889 -> 28967 bytes .../histogram_errorbars_inherit_color.png | Bin 27065 -> 26488 bytes 4 files changed, 24 insertions(+), 15 deletions(-) diff --git a/src/components/errorbars/calc.js b/src/components/errorbars/calc.js index b05177ba0e9..5d24a8ffb18 100644 --- a/src/components/errorbars/calc.js +++ b/src/components/errorbars/calc.js @@ -6,17 +6,16 @@ * LICENSE file in the root directory of this source tree. */ - 'use strict'; var isNumeric = require('fast-isnumeric'); var Registry = require('../../registry'); var Axes = require('../../plots/cartesian/axes'); +var Lib = require('../../lib'); var makeComputeError = require('./compute_error'); - module.exports = function calc(gd) { var calcdata = gd.calcdata; @@ -73,8 +72,13 @@ function calcOneAxis(calcTrace, trace, axis, coord) { } } - var extremes = Axes.findExtremes(axis, vals, {padded: true}); var axId = axis._id; - trace._extremes[axId].min = trace._extremes[axId].min.concat(extremes.min); - trace._extremes[axId].max = trace._extremes[axId].max.concat(extremes.max); + var baseExtremes = trace._extremes[axId]; + var extremes = Axes.findExtremes( + axis, + vals, + Lib.extendFlat({tozero: baseExtremes.opts.tozero}, {padded: true}) + ); + baseExtremes.min = baseExtremes.min.concat(extremes.min); + baseExtremes.max = baseExtremes.max.concat(extremes.max); } diff --git a/src/plots/cartesian/autorange.js b/src/plots/cartesian/autorange.js index fe80481fc02..55cf30c279b 100644 --- a/src/plots/cartesian/autorange.js +++ b/src/plots/cartesian/autorange.js @@ -290,7 +290,7 @@ function doAutoRange(gd, ax) { * - ax.d2l * @param {array} data: * array of numbers (i.e. already run though ax.d2c) - * @param {object} options: + * @param {object} opts: * available keys are: * vpad: (number or number array) pad values (data value +-vpad) * ppad: (number or number array) pad pixels (pixel location +-ppad) @@ -308,17 +308,18 @@ function doAutoRange(gd, ax) { * - val {number} * - pad {number} * - extrappad {number} + * - opts {object}: a ref to the passed "options" object */ -function findExtremes(ax, data, options) { - if(!options) options = {}; +function findExtremes(ax, data, opts) { + if(!opts) opts = {}; if(!ax._m) ax.setScale(); var minArray = []; var maxArray = []; var len = data.length; - var extrapad = options.padded || false; - var tozero = options.tozero && (ax.type === 'linear' || ax.type === '-'); + var extrapad = opts.padded || false; + var tozero = opts.tozero && (ax.type === 'linear' || ax.type === '-'); var isLog = ax.type === 'log'; var hasArrayOption = false; var i, v, di, dmin, dmax, ppadiplus, ppadiminus, vmin, vmax; @@ -335,11 +336,11 @@ function findExtremes(ax, data, options) { } var ppadplus = makePadAccessor((ax._m > 0 ? - options.ppadplus : options.ppadminus) || options.ppad || 0); + opts.ppadplus : opts.ppadminus) || opts.ppad || 0); var ppadminus = makePadAccessor((ax._m > 0 ? - options.ppadminus : options.ppadplus) || options.ppad || 0); - var vpadplus = makePadAccessor(options.vpadplus || options.vpad); - var vpadminus = makePadAccessor(options.vpadminus || options.vpad); + opts.ppadminus : opts.ppadplus) || opts.ppad || 0); + var vpadplus = makePadAccessor(opts.vpadplus || opts.vpad); + var vpadminus = makePadAccessor(opts.vpadminus || opts.vpad); if(!hasArrayOption) { // with no arrays other than `data` we don't need to consider @@ -403,7 +404,11 @@ function findExtremes(ax, data, options) { for(i = 0; i < iMax; i++) addItem(i); for(i = len - 1; i >= iMax; i--) addItem(i); - return {min: minArray, max: maxArray}; + return { + min: minArray, + max: maxArray, + opts: opts + }; } function collapseMinArray(array, newVal, newPad, opts) { diff --git a/test/image/baselines/bar_errorbars_inherit_color.png b/test/image/baselines/bar_errorbars_inherit_color.png index 8002869a429cc1b4291b7de5602bc35f03aa2990..f883db3d3d177465ea45f380f9daef2cead5937f 100644 GIT binary patch literal 28967 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 Fe*-1OB|HEC literal 28889 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 diff --git a/test/image/baselines/histogram_errorbars_inherit_color.png b/test/image/baselines/histogram_errorbars_inherit_color.png index 032be851cf66e5d97e5b8f65fc70a9e90f71ff25..368df22c42f4db8d392a4cd53a2bcce012c61798 100644 GIT binary patch literal 26488 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 Ib4q9e0LpZae*gdg literal 27065 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 GC;tc9nj{YZ From c14ad6972b5b0537819002a1b504d254c4da28ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Mon, 21 Jan 2019 11:54:00 -0500 Subject: [PATCH 3/5] make posAxis findExtremes calls per-trace --- src/traces/bar/cross_trace_calc.js | 60 +++++++++++++----------------- 1 file changed, 26 insertions(+), 34 deletions(-) diff --git a/src/traces/bar/cross_trace_calc.js b/src/traces/bar/cross_trace_calc.js index ef4df4d2a90..f15af7b5a35 100644 --- a/src/traces/bar/cross_trace_calc.js +++ b/src/traces/bar/cross_trace_calc.js @@ -420,52 +420,44 @@ function setBarCenterAndWidth(gd, pa, sieve) { function updatePositionAxis(gd, pa, sieve, allowMinDtick) { var calcTraces = sieve.traces; - var distinctPositions = sieve.distinctPositions; - var distinctPositions0 = distinctPositions[0]; var minDiff = sieve.minDiff; var vpad = minDiff / 2; - Axes.minDtick(pa, minDiff, distinctPositions0, allowMinDtick); - - // If the user set the bar width or the offset, - // then bars can be shifted away from their positions - // and widths can be larger than minDiff. - // - // Here, we compute pMin and pMax to expand the position axis, - // so that all bars are fully within the axis range. - var pMin = Math.min.apply(Math, distinctPositions) - vpad; - var pMax = Math.max.apply(Math, distinctPositions) + vpad; + Axes.minDtick(pa, sieve.minDiff, sieve.distinctPositions[0], allowMinDtick); for(var i = 0; i < calcTraces.length; i++) { var calcTrace = calcTraces[i]; var calcTrace0 = calcTrace[0]; var fullTrace = calcTrace0.trace; - - if(fullTrace.width === undefined && fullTrace.offset === undefined) { - continue; + var pts = []; + var bar, l, r, j; + + for(j = 0; j < calcTrace.length; j++) { + bar = calcTrace[j]; + l = bar.p - vpad; + r = bar.p + vpad; + pts.push(l, r); } - var t = calcTrace0.t; - var poffset = t.poffset; - var barwidth = t.barwidth; - var poffsetIsArray = Array.isArray(poffset); - var barwidthIsArray = Array.isArray(barwidth); - - for(var j = 0; j < calcTrace.length; j++) { - var calcBar = calcTrace[j]; - var calcBarOffset = (poffsetIsArray) ? poffset[j] : poffset; - var calcBarWidth = (barwidthIsArray) ? barwidth[j] : barwidth; - var p = calcBar.p; - var l = p + calcBarOffset; - var r = l + calcBarWidth; - - pMin = Math.min(pMin, l); - pMax = Math.max(pMax, r); + if(fullTrace.width || fullTrace.offset) { + var t = calcTrace0.t; + var poffset = t.poffset; + var barwidth = t.barwidth; + var poffsetIsArray = Array.isArray(poffset); + var barwidthIsArray = Array.isArray(barwidth); + + for(j = 0; j < calcTrace.length; j++) { + bar = calcTrace[j]; + var calcBarOffset = poffsetIsArray ? poffset[j] : poffset; + var calcBarWidth = barwidthIsArray ? barwidth[j] : barwidth; + l = bar.p + calcBarOffset; + r = l + calcBarWidth; + pts.push(l, r); + } } - } - var extremes = Axes.findExtremes(pa, [pMin, pMax], {padded: false}); - putExtremes(calcTraces, pa, extremes); + fullTrace._extremes[pa._id] = Axes.findExtremes(pa, pts, {padded: false}); + } } function expandRange(range, newValue) { From b18669de2e901ef9351038e18f6ce21d2e7bec0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Mon, 21 Jan 2019 17:17:27 -0500 Subject: [PATCH 4/5] make sizeAxis findExtremes calls per-trace ... this way we can :hocho: min/max logic in Bar.crossTraceCalc which is already done during Axes.getAutoRange. --- src/traces/bar/cross_trace_calc.js | 119 ++++++++++++++--------------- 1 file changed, 58 insertions(+), 61 deletions(-) diff --git a/src/traces/bar/cross_trace_calc.js b/src/traces/bar/cross_trace_calc.js index f15af7b5a35..6d87b74572c 100644 --- a/src/traces/bar/cross_trace_calc.js +++ b/src/traces/bar/cross_trace_calc.js @@ -460,24 +460,17 @@ function updatePositionAxis(gd, pa, sieve, allowMinDtick) { } } -function expandRange(range, newValue) { - if(isNumeric(range[0])) range[0] = Math.min(range[0], newValue); - else range[0] = newValue; - - if(isNumeric(range[1])) range[1] = Math.max(range[1], newValue); - else range[1] = newValue; -} - // store these bar bases and tops in calcdata // and make sure the size axis includes zero, // along with the bases and tops of each bar. function setBaseAndTop(gd, sa, sieve) { var calcTraces = sieve.traces; var sLetter = getAxisLetter(sa); - var sRange = [null, null]; for(var i = 0; i < calcTraces.length; i++) { var calcTrace = calcTraces[i]; + var fullTrace = calcTrace[0].trace; + var pts = []; for(var j = 0; j < calcTrace.length; j++) { var bar = calcTrace[j]; @@ -485,14 +478,15 @@ function setBaseAndTop(gd, sa, sieve) { var barTop = barBase + bar.s; bar[sLetter] = barTop; - - if(isNumeric(sa.c2l(barTop))) expandRange(sRange, barTop); - if(bar.hasB && isNumeric(sa.c2l(barBase))) expandRange(sRange, barBase); + pts.push(barTop); + if(bar.hasB) pts.push(barBase); } - } - var extremes = Axes.findExtremes(sa, sRange, {tozero: true, padded: true}); - putExtremes(calcTraces, sa, extremes); + fullTrace._extremes[sa._id] = Axes.findExtremes(sa, pts, { + tozero: true, + padded: true + }); + } } function stackBars(gd, sa, sieve) { @@ -500,35 +494,38 @@ function stackBars(gd, sa, sieve) { var barnorm = fullLayout.barnorm; var sLetter = getAxisLetter(sa); var calcTraces = sieve.traces; - var sRange = [null, null]; for(var i = 0; i < calcTraces.length; i++) { var calcTrace = calcTraces[i]; + var fullTrace = calcTrace[0].trace; + var pts = []; for(var j = 0; j < calcTrace.length; j++) { var bar = calcTrace[j]; - if(bar.s === BADNUM) continue; - - // stack current bar and get previous sum - var barBase = sieve.put(bar.p, bar.b + bar.s); - var barTop = barBase + bar.b + bar.s; + if(bar.s !== BADNUM) { + // stack current bar and get previous sum + var barBase = sieve.put(bar.p, bar.b + bar.s); + var barTop = barBase + bar.b + bar.s; - // store the bar base and top in each calcdata item - bar.b = barBase; - bar[sLetter] = barTop; + // store the bar base and top in each calcdata item + bar.b = barBase; + bar[sLetter] = barTop; - if(!barnorm) { - if(isNumeric(sa.c2l(barTop))) expandRange(sRange, barTop); - if(bar.hasB && isNumeric(sa.c2l(barBase))) expandRange(sRange, barBase); + if(!barnorm) { + pts.push(barTop); + if(bar.hasB) pts.push(barBase); + } } } - } - // if barnorm is set, let normalizeBars update the axis range - if(!barnorm) { - var extremes = Axes.findExtremes(sa, sRange, {tozero: true, padded: true}); - putExtremes(calcTraces, sa, extremes); + // if barnorm is set, let normalizeBars update the axis range + if(!barnorm) { + fullTrace._extremes[sa._id] = Axes.findExtremes(sa, pts, { + tozero: true, + padded: true + }); + } } } @@ -551,53 +548,53 @@ function sieveBars(gd, sa, sieve) { // normalizeBars requires that either sieveBars or stackBars has been // previously invoked. function normalizeBars(gd, sa, sieve) { + var fullLayout = gd._fullLayout; var calcTraces = sieve.traces; var sLetter = getAxisLetter(sa); - var sTop = (gd._fullLayout.barnorm === 'fraction') ? 1 : 100; + var sTop = fullLayout.barnorm === 'fraction' ? 1 : 100; var sTiny = sTop / 1e9; // in case of rounding error in sum var sMin = sa.l2c(sa.c2l(0)); - var sMax = (gd._fullLayout.barmode === 'stack') ? sTop : sMin; - var sRange = [sMin, sMax]; - var padded = false; + var sMax = fullLayout.barmode === 'stack' ? sTop : sMin; - function maybeExpand(newValue) { - if(isNumeric(sa.c2l(newValue)) && - ((newValue < sMin - sTiny) || (newValue > sMax + sTiny) || !isNumeric(sMin)) - ) { - padded = true; - expandRange(sRange, newValue); - } + function needsPadding(v) { + return ( + isNumeric(sa.c2l(v)) && + ((v < sMin - sTiny) || (v > sMax + sTiny) || !isNumeric(sMin)) + ); } for(var i = 0; i < calcTraces.length; i++) { var calcTrace = calcTraces[i]; + var fullTrace = calcTrace[0].trace; + var pts = []; + var padded = false; for(var j = 0; j < calcTrace.length; j++) { var bar = calcTrace[j]; - if(bar.s === BADNUM) continue; + if(bar.s !== BADNUM) { + var scale = Math.abs(sTop / sieve.get(bar.p, bar.s)); + bar.b *= scale; + bar.s *= scale; - var scale = Math.abs(sTop / sieve.get(bar.p, bar.s)); - bar.b *= scale; - bar.s *= scale; + var barBase = bar.b; + var barTop = barBase + bar.s; - var barBase = bar.b; - var barTop = barBase + bar.s; - bar[sLetter] = barTop; + bar[sLetter] = barTop; + pts.push(barTop); + padded = padded || needsPadding(barTop); - maybeExpand(barTop); - if(bar.hasB) maybeExpand(barBase); + if(bar.hasB) { + pts.push(barBase); + padded = padded || needsPadding(barBase); + } + } } - } - - // update range of size axis - var extremes = Axes.findExtremes(sa, sRange, {tozero: true, padded: padded}); - putExtremes(calcTraces, sa, extremes); -} -function putExtremes(cd, ax, extremes) { - for(var i = 0; i < cd.length; i++) { - cd[i][0].trace._extremes[ax._id] = extremes; + fullTrace._extremes[sa._id] = Axes.findExtremes(sa, pts, { + tozero: true, + padded: padded + }); } } From 7e0a22895449cdf553106dfa1a89480eddf05be4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Mon, 21 Jan 2019 17:21:30 -0500 Subject: [PATCH 5/5] fix #3031 - don't set tozero:true when all bar bases are above zero --- src/traces/bar/cross_trace_calc.js | 16 +++++++++++++-- .../bar_autorange-above-zero-normalized.png | Bin 0 -> 9542 bytes .../baselines/bar_autorange-above-zero.png | Bin 0 -> 8640 bytes .../bar_autorange-above-zero-normalized.json | 19 ++++++++++++++++++ .../image/mocks/bar_autorange-above-zero.json | 18 +++++++++++++++++ 5 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 test/image/baselines/bar_autorange-above-zero-normalized.png create mode 100644 test/image/baselines/bar_autorange-above-zero.png create mode 100644 test/image/mocks/bar_autorange-above-zero-normalized.json create mode 100644 test/image/mocks/bar_autorange-above-zero.json diff --git a/src/traces/bar/cross_trace_calc.js b/src/traces/bar/cross_trace_calc.js index 6d87b74572c..2a0224dc35e 100644 --- a/src/traces/bar/cross_trace_calc.js +++ b/src/traces/bar/cross_trace_calc.js @@ -471,6 +471,7 @@ function setBaseAndTop(gd, sa, sieve) { var calcTrace = calcTraces[i]; var fullTrace = calcTrace[0].trace; var pts = []; + var allBarBaseAboveZero = true; for(var j = 0; j < calcTrace.length; j++) { var bar = calcTrace[j]; @@ -480,10 +481,14 @@ function setBaseAndTop(gd, sa, sieve) { bar[sLetter] = barTop; pts.push(barTop); if(bar.hasB) pts.push(barBase); + + if(!bar.hasB || !(bar.b > 0 && bar.s > 0)) { + allBarBaseAboveZero = false; + } } fullTrace._extremes[sa._id] = Axes.findExtremes(sa, pts, { - tozero: true, + tozero: !allBarBaseAboveZero, padded: true }); } @@ -522,6 +527,8 @@ function stackBars(gd, sa, sieve) { // if barnorm is set, let normalizeBars update the axis range if(!barnorm) { fullTrace._extremes[sa._id] = Axes.findExtremes(sa, pts, { + // N.B. we don't stack base with 'base', + // so set tozero:true always! tozero: true, padded: true }); @@ -567,6 +574,7 @@ function normalizeBars(gd, sa, sieve) { var calcTrace = calcTraces[i]; var fullTrace = calcTrace[0].trace; var pts = []; + var allBarBaseAboveZero = true; var padded = false; for(var j = 0; j < calcTrace.length; j++) { @@ -588,11 +596,15 @@ function normalizeBars(gd, sa, sieve) { pts.push(barBase); padded = padded || needsPadding(barBase); } + + if(!bar.hasB || !(bar.b > 0 && bar.s > 0)) { + allBarBaseAboveZero = false; + } } } fullTrace._extremes[sa._id] = Axes.findExtremes(sa, pts, { - tozero: true, + tozero: !allBarBaseAboveZero, padded: padded }); } diff --git a/test/image/baselines/bar_autorange-above-zero-normalized.png b/test/image/baselines/bar_autorange-above-zero-normalized.png new file mode 100644 index 0000000000000000000000000000000000000000..407673e79228da6acd90396d89977c005173d61b GIT binary patch literal 9542 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 literal 0 HcmV?d00001 diff --git a/test/image/mocks/bar_autorange-above-zero-normalized.json b/test/image/mocks/bar_autorange-above-zero-normalized.json new file mode 100644 index 00000000000..02b1983a4bf --- /dev/null +++ b/test/image/mocks/bar_autorange-above-zero-normalized.json @@ -0,0 +1,19 @@ +{ + "data": [ + { + "y": [1, 2, 3], + "base": [3, 4, 5], + "type": "bar" + }, + { + "y": [1, 2, 3], + "base": [3, 4, 5], + "type": "bar" + } + ], + "layout": { + "barnorm": "percent", + "width": 400, + "height": 400 + } +} diff --git a/test/image/mocks/bar_autorange-above-zero.json b/test/image/mocks/bar_autorange-above-zero.json new file mode 100644 index 00000000000..f6b346b0999 --- /dev/null +++ b/test/image/mocks/bar_autorange-above-zero.json @@ -0,0 +1,18 @@ +{ + "data": [ + { + "y": [1, 2, 3], + "base": [3, 4, 5], + "type": "bar" + }, + { + "y": [1, 2, 3], + "base": [3, 4, 5], + "type": "bar" + } + ], + "layout": { + "width": 400, + "height": 400 + } +}