Skip to content

Commit 6cbd9f8

Browse files
committed
add ticks add the start of the breaks and revise remove overlaps
1 parent 8b4d9d6 commit 6cbd9f8

10 files changed

+31
-61
lines changed

src/plots/cartesian/axes.js

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -611,31 +611,43 @@ axes.calcTicks = function calcTicks(ax) {
611611
generateTicks();
612612

613613
if(ax.rangebreaks) {
614-
var nTicksBefore = tickVals.length;
615-
616614
// remove ticks falling inside rangebreaks
617615
tickVals = tickVals.filter(function(d) {
618616
return ax.maskBreaks(d.value) !== BADNUM;
619617
});
620618

621-
// if 'numerous' ticks get placed into rangebreaks,
622-
// increase dtick to generate more ticks,
623-
// so that some hopefully fall between rangebreaks
624-
if(ax.tickmode === 'auto' && tickVals.length < nTicksBefore / 6) {
625-
axes.autoTicks(ax, ax._roughDTick / 3);
626-
autoTickRound(ax);
627-
ax._tmin = axes.tickFirst(ax);
628-
generateTicks();
629-
tickVals = tickVals.filter(function(d) {
630-
return ax.maskBreaks(d.value) !== BADNUM;
631-
});
619+
// add tick at the start of every rangebreak
620+
if(ax.tickmode === 'auto') {
621+
for(var k = 0; k < ax._rangebreaks.length; k++) {
622+
Lib.pushUnique(tickVals, {
623+
minor: false,
624+
value: ax._rangebreaks[k].min
625+
});
626+
}
632627
}
633628

634-
// remove "overlapping" ticks (e.g. on either side of a break)
635-
var tf2 = ax.tickfont ? 1.5 * ax.tickfont.size : 0;
636-
tickVals = tickVals.filter(function(d, i, self) {
637-
return !(i && Math.abs(ax.c2p(d.value) - ax.c2p(self[i - 1].value)) < tf2);
629+
// sort
630+
tickVals = tickVals.sort(function(a, b) {
631+
return a.value - b.value;
638632
});
633+
634+
// remove "overlapping" ticks (e.g. on either side of a break)
635+
var len = tickVals.length;
636+
if(len > 2) {
637+
var tf2 = 2 * (ax.tickfont ? ax.tickfont.size : 12);
638+
639+
var newTickVals = [];
640+
var prevPos;
641+
for(var q = 0; q < len; q++) {
642+
var pos = ax.c2p(tickVals[q].value);
643+
644+
if(prevPos === undefined || Math.abs(pos - prevPos) > tf2) {
645+
prevPos = pos;
646+
newTickVals.push(tickVals[q]);
647+
}
648+
}
649+
tickVals = newTickVals;
650+
}
639651
}
640652

641653
// If same angle over a full circle, the last tick vals is a duplicate.
-449 Bytes
Loading
11.8 KB
Loading
Loading
-1.41 KB
Loading
351 Bytes
Loading
Loading
Loading

test/jasmine/tests/axes_test.js

Lines changed: 0 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -5008,48 +5008,6 @@ describe('Test axes', function() {
50085008
.catch(failTest)
50095009
.then(done);
50105010
});
5011-
5012-
it('should increase dtick when too many (auto) ticks fall into rangebreaks', function(done) {
5013-
var fig = Lib.extendDeep({}, require('@mocks/axes_breaks-finance.json'));
5014-
// break over weekend
5015-
fig.layout.xaxis.rangebreaks[0].enabled = false;
5016-
// break on a single holiday
5017-
fig.layout.xaxis.rangebreaks[1].enabled = false;
5018-
5019-
Plotly.plot(gd, fig)
5020-
.then(function() {
5021-
_assert('base', {
5022-
tickVals: [1483833600000, 1485043200000, 1486252800000]
5023-
});
5024-
})
5025-
.then(function() {
5026-
gd.layout.xaxis.rangebreaks[0].enabled = true;
5027-
gd.layout.xaxis.rangebreaks[1].enabled = true;
5028-
return Plotly.react(gd, gd.data, gd.layout);
5029-
})
5030-
.then(function() {
5031-
_assert('with rangebreaks enabled on x-axis', {
5032-
tickVals: [
5033-
1483574400000, 1484092800000, 1484611200000, 1484870400000,
5034-
1485388800000, 1485907200000, 1486425600000, 1486684800000
5035-
]
5036-
});
5037-
})
5038-
.then(function() {
5039-
// a Saturday
5040-
gd.layout.xaxis.tick0 = '2017-01-02';
5041-
// one week
5042-
gd.layout.xaxis.dtick = 7 + 24 * 60 * 60 * 1000;
5043-
return Plotly.react(gd, gd.data, gd.layout);
5044-
})
5045-
.then(function() {
5046-
_assert('honor set tick0/dtick even though they result in few visible ticks', {
5047-
tickVals: [1483488000014]
5048-
});
5049-
})
5050-
.catch(failTest)
5051-
.then(done);
5052-
});
50535011
});
50545012

50555013
it('should set visible:false in scattergl traces on axis with rangebreaks', function(done) {

test/jasmine/tests/cartesian_interact_test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2135,7 +2135,7 @@ describe('axis zoom/pan and main plot zoom', function() {
21352135
'1970-01-01 00:00:00.2019'
21362136
]);
21372137
})
2138-
.then(doDrag('xy', 'nsew', 0, 50))
2138+
.then(doDrag('xy', 'nsew', 0, -50))
21392139
// y range would be ~ [62, 100] w/o rangebreaks
21402140
.then(function() {
21412141
_assert('after y-only zoombox', [
@@ -2151,7 +2151,7 @@ describe('axis zoom/pan and main plot zoom', function() {
21512151
]);
21522152
})
21532153
.then(function() { return Plotly.relayout(gd, 'dragmode', 'pan'); })
2154-
.then(doDrag('xy', 'nsew', 0, 50))
2154+
.then(doDrag('xy', 'nsew', 0, -50))
21552155
// y range would be ~ [35, 239] w/o rangebreaks
21562156
.then(function() {
21572157
_assert('after y-only pan', [

0 commit comments

Comments
 (0)