Skip to content

Commit 1a09b58

Browse files
committed
center weekly labels on weekend rangebreaks
1 parent 979596e commit 1a09b58

File tree

2 files changed

+66
-2
lines changed

2 files changed

+66
-2
lines changed

src/plots/cartesian/axes.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -777,20 +777,23 @@ axes.calcTicks = function calcTicks(ax, opts) {
777777
var A = tickVals[a].value;
778778
var B = tickVals[b].value;
779779

780-
var delta = definedDelta || Math.abs(B - A);
780+
var actualDelta = Math.abs(B - A);
781+
var delta = definedDelta || actualDelta;
781782
if(delta >= ONEDAY * 365) { // Years could have days less than ONEAVGYEAR period
782783
v += ONEAVGYEAR / 2;
783784
} else if(delta >= ONEAVGQUARTER) {
784785
v += ONEAVGQUARTER / 2;
785786
} else if(delta >= ONEMINMONTH) { // Months could have days less than ONEAVGMONTH period
786-
var actualDelta = Math.abs(B - A);
787787
if(actualDelta >= ONEMINMONTH && actualDelta <= ONEMAXMONTH) {
788788
v += actualDelta / 2;
789789
} else {
790790
v += ONEAVGMONTH / 2;
791791
}
792792
} else if(delta >= ONEWEEK) {
793793
v += ONEWEEK / 2;
794+
if(actualDelta === ONEWEEK && ax._hasDayOfWeekBreaks) {
795+
v -= ONEDAY; // half of two days which is a good approximate for the number of week-end days
796+
}
794797
} else if(delta >= ONEDAY) {
795798
v += ONEDAY / 2;
796799
}

test/jasmine/tests/axes_test.js

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5383,6 +5383,67 @@ describe('Test axes', function() {
53835383
});
53845384
});
53855385

5386+
['%U', '%V', '%W'].forEach(function(tickformat, i) {
5387+
it('should move weekly labels by one day (i.e. to help center the labels) when *day of week* rangebreak is present', function(done) {
5388+
Plotly.newPlot(gd, {
5389+
data: [{
5390+
x: [
5391+
'2020-01-01',
5392+
'2020-01-02',
5393+
'2020-01-03',
5394+
'2020-01-04',
5395+
'2020-01-05',
5396+
'2020-01-06',
5397+
'2020-01-07',
5398+
'2020-01-08',
5399+
'2020-01-09',
5400+
'2020-01-10',
5401+
'2020-01-11',
5402+
'2020-01-12',
5403+
'2020-01-13',
5404+
'2020-01-14',
5405+
'2020-01-15',
5406+
'2020-01-16',
5407+
'2020-01-17',
5408+
'2020-01-18',
5409+
'2020-01-19',
5410+
'2020-01-20',
5411+
'2020-01-21',
5412+
'2020-01-22',
5413+
'2020-01-23',
5414+
'2020-01-24',
5415+
'2020-01-25',
5416+
'2020-01-26',
5417+
'2020-01-27',
5418+
'2020-01-28',
5419+
'2020-01-29',
5420+
'2020-01-30',
5421+
'2020-01-31'
5422+
]
5423+
}],
5424+
layout: {
5425+
width: 1000,
5426+
xaxis: {
5427+
rangebreaks: [{bounds: ['sat', 'mon']}],
5428+
ticklabelmode: 'period',
5429+
tickformat: '%b-' + tickformat
5430+
}
5431+
}
5432+
})
5433+
.then(function() {
5434+
_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'],
5438+
['Dec-01', 'Jan-02', 'Jan-03', 'Jan-04', 'Jan-05'],
5439+
['Dec-52', 'Jan-01', 'Jan-02', 'Jan-03', 'Jan-04']
5440+
][i]);
5441+
})
5442+
.catch(failTest)
5443+
.then(done);
5444+
});
5445+
});
5446+
53865447
['%A', '%a', '%d', '%e', '%j', '%u', '%w', '%x'].forEach(function(tickformat, i) {
53875448
it('should respect daily tickformat that includes ' + tickformat, function(done) {
53885449
Plotly.newPlot(gd, {

0 commit comments

Comments
 (0)