Skip to content

Commit f907f2a

Browse files
committed
revise period lengths on axes with rangebreaks
1 parent 6fb0133 commit f907f2a

File tree

2 files changed

+27
-18
lines changed

2 files changed

+27
-18
lines changed

src/plots/cartesian/axes.js

+22-15
Original file line numberDiff line numberDiff line change
@@ -781,42 +781,49 @@ axes.calcTicks = function calcTicks(ax, opts) {
781781

782782
var A = tickVals[a].value;
783783
var B = tickVals[b].value;
784-
785784
var actualDelta = Math.abs(B - A);
786785
var delta = definedDelta || actualDelta;
786+
var periodLength = 0;
787+
787788
if(delta >= ONEMINYEAR) {
788789
if(actualDelta >= ONEMINYEAR && actualDelta <= ONEMAXYEAR) {
789-
v += actualDelta / 2;
790+
periodLength = actualDelta;
790791
} else {
791-
v += ONEAVGYEAR / 2;
792+
periodLength = ONEAVGYEAR;
792793
}
793794
} else if(delta >= ONEMINQUARTER) {
794795
if(
795796
definedDelta && // case of specified by tickfomat
796797
actualDelta >= ONEMINQUARTER && actualDelta <= ONEMAXQUARTER
797798
) {
798-
v += actualDelta / 2;
799+
periodLength = actualDelta;
799800
} else {
800-
v += ONEAVGQUARTER / 2;
801+
periodLength = ONEAVGQUARTER;
801802
}
802803
} else if(delta >= ONEMINMONTH) {
803804
if(actualDelta >= ONEMINMONTH && actualDelta <= ONEMAXMONTH) {
804-
v += actualDelta / 2;
805+
periodLength = actualDelta;
805806
} else {
806-
v += ONEAVGMONTH / 2;
807+
periodLength = ONEAVGMONTH;
807808
}
808809
} else if(delta >= ONEWEEK) {
809-
v += ONEWEEK / 2;
810-
if(
811-
definedDelta && // case of specified by tickfomat
812-
actualDelta === ONEWEEK && ax._hasDayOfWeekBreaks
813-
) {
814-
v -= ONEDAY; // half of two days which is a good approximation for the number of week-end days
815-
}
810+
periodLength = ONEWEEK;
816811
} else if(delta >= ONEDAY) {
817-
v += ONEDAY / 2;
812+
periodLength = ONEDAY;
818813
}
819814

815+
if(ax.rangebreaks) {
816+
var nOut = 0;
817+
var nAll = 2 * 3 * 5 * 7; // number of samples
818+
for(var c = 0; c < nAll; c++) {
819+
var r = c / nAll;
820+
if(ax.maskBreaks(A * (1 - r) + B * r) === BADNUM) nOut++;
821+
}
822+
periodLength *= 1 - nOut / nAll;
823+
}
824+
825+
v += periodLength / 2;
826+
820827
ticksOut[i].periodX = v;
821828

822829
if(v > maxRange || v < minRange) { // hide label if outside the range

test/jasmine/tests/axes_test.js

+5-3
Original file line numberDiff line numberDiff line change
@@ -5432,9 +5432,11 @@ describe('Test axes', function() {
54325432
})
54335433
.then(function() {
54345434
_assert('', [
5435-
'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'
5436-
], [
5437-
['Dec-52', 'Jan-01', 'Jan-02', 'Jan-03', 'Jan-04'],
5435+
['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'],
5436+
['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'],
5437+
['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']
5438+
][i], [
5439+
['', 'Jan-01', 'Jan-02', 'Jan-03', 'Jan-04'],
54385440
['Dec-01', 'Jan-02', 'Jan-03', 'Jan-04', 'Jan-05'],
54395441
['Dec-52', 'Jan-01', 'Jan-02', 'Jan-03', 'Jan-04']
54405442
][i]);

0 commit comments

Comments
 (0)