From f907f2a3f8009f2180d7bcf00bcd31e17c4351f8 Mon Sep 17 00:00:00 2001 From: archmoj Date: Wed, 19 Aug 2020 18:38:31 -0400 Subject: [PATCH] revise period lengths on axes with rangebreaks --- src/plots/cartesian/axes.js | 37 ++++++++++++++++++++------------- test/jasmine/tests/axes_test.js | 8 ++++--- 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/src/plots/cartesian/axes.js b/src/plots/cartesian/axes.js index ca684db2cf0..cf1dc993f8b 100644 --- a/src/plots/cartesian/axes.js +++ b/src/plots/cartesian/axes.js @@ -781,42 +781,49 @@ axes.calcTicks = function calcTicks(ax, opts) { var A = tickVals[a].value; var B = tickVals[b].value; - var actualDelta = Math.abs(B - A); var delta = definedDelta || actualDelta; + var periodLength = 0; + if(delta >= ONEMINYEAR) { if(actualDelta >= ONEMINYEAR && actualDelta <= ONEMAXYEAR) { - v += actualDelta / 2; + periodLength = actualDelta; } else { - v += ONEAVGYEAR / 2; + periodLength = ONEAVGYEAR; } } else if(delta >= ONEMINQUARTER) { if( definedDelta && // case of specified by tickfomat actualDelta >= ONEMINQUARTER && actualDelta <= ONEMAXQUARTER ) { - v += actualDelta / 2; + periodLength = actualDelta; } else { - v += ONEAVGQUARTER / 2; + periodLength = ONEAVGQUARTER; } } else if(delta >= ONEMINMONTH) { if(actualDelta >= ONEMINMONTH && actualDelta <= ONEMAXMONTH) { - v += actualDelta / 2; + periodLength = actualDelta; } else { - v += ONEAVGMONTH / 2; + periodLength = ONEAVGMONTH; } } else if(delta >= ONEWEEK) { - v += ONEWEEK / 2; - if( - definedDelta && // case of specified by tickfomat - actualDelta === ONEWEEK && ax._hasDayOfWeekBreaks - ) { - v -= ONEDAY; // half of two days which is a good approximation for the number of week-end days - } + periodLength = ONEWEEK; } else if(delta >= ONEDAY) { - v += ONEDAY / 2; + periodLength = ONEDAY; } + if(ax.rangebreaks) { + var nOut = 0; + var nAll = 2 * 3 * 5 * 7; // number of samples + for(var c = 0; c < nAll; c++) { + var r = c / nAll; + if(ax.maskBreaks(A * (1 - r) + B * r) === BADNUM) nOut++; + } + periodLength *= 1 - nOut / nAll; + } + + v += periodLength / 2; + ticksOut[i].periodX = v; if(v > maxRange || v < minRange) { // hide label if outside the range diff --git a/test/jasmine/tests/axes_test.js b/test/jasmine/tests/axes_test.js index 3d67f7a8e02..d51ab49cfbb 100644 --- a/test/jasmine/tests/axes_test.js +++ b/test/jasmine/tests/axes_test.js @@ -5432,9 +5432,11 @@ describe('Test axes', function() { }) .then(function() { _assert('', [ - '2020-01-01 12:00', '2020-01-08 12:00', '2020-01-15 12:00', '2020-01-22 12:00', '2020-01-29 12:00' - ], [ - ['Dec-52', 'Jan-01', 'Jan-02', 'Jan-03', 'Jan-04'], + ['2019-12-31 04:24', '2020-01-08 12:00', '2020-01-15 12:00', '2020-01-22 12:00', '2020-01-29 12:00'], + ['2020-01-01 12:00', '2020-01-08 12:00', '2020-01-15 12:00', '2020-01-22 12:00', '2020-01-29 12:00'], + ['2020-01-01 12:00', '2020-01-08 12:00', '2020-01-15 12:00', '2020-01-22 12:00', '2020-01-29 12:00'] + ][i], [ + ['', 'Jan-01', 'Jan-02', 'Jan-03', 'Jan-04'], ['Dec-01', 'Jan-02', 'Jan-03', 'Jan-04', 'Jan-05'], ['Dec-52', 'Jan-01', 'Jan-02', 'Jan-03', 'Jan-04'] ][i]);