Skip to content

Commit a1a68fb

Browse files
authored
Merge pull request #2050 from plotly/date-bars-autorange
Bar axis autorange fix
2 parents 0ad39be + ea8057b commit a1a68fb

File tree

3 files changed

+41
-9
lines changed

3 files changed

+41
-9
lines changed

src/traces/bar/calc.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,17 +63,23 @@ module.exports = function calc(gd, trace) {
6363
if(Array.isArray(base)) {
6464
for(i = 0; i < Math.min(base.length, cd.length); i++) {
6565
b = sa.d2c(base[i], 0, scalendar);
66-
cd[i].b = (isNumeric(b)) ? b : 0;
66+
if(isNumeric(b)) {
67+
cd[i].b = +b;
68+
cd[i].hasB = 1;
69+
}
70+
else cd[i].b = 0;
6771
}
6872
for(; i < cd.length; i++) {
6973
cd[i].b = 0;
7074
}
7175
}
7276
else {
7377
b = sa.d2c(base, 0, scalendar);
74-
b = (isNumeric(b)) ? b : 0;
78+
var hasBase = isNumeric(b);
79+
b = hasBase ? b : 0;
7580
for(i = 0; i < cd.length; i++) {
7681
cd[i].b = b;
82+
if(hasBase) cd[i].hasB = 1;
7783
}
7884
}
7985

src/traces/bar/set_positions.js

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -467,8 +467,7 @@ function setBaseAndTop(gd, sa, sieve) {
467467
// along with the bases and tops of each bar.
468468
var traces = sieve.traces,
469469
sLetter = getAxisLetter(sa),
470-
s0 = sa.l2c(sa.c2l(0)),
471-
sRange = [s0, s0];
470+
sRange = [null, null];
472471

473472
for(var i = 0; i < traces.length; i++) {
474473
var trace = traces[i];
@@ -481,7 +480,7 @@ function setBaseAndTop(gd, sa, sieve) {
481480
bar[sLetter] = barTop;
482481

483482
if(isNumeric(sa.c2l(barTop))) expandRange(sRange, barTop);
484-
if(isNumeric(sa.c2l(barBase))) expandRange(sRange, barBase);
483+
if(bar.hasB && isNumeric(sa.c2l(barBase))) expandRange(sRange, barBase);
485484
}
486485
}
487486

@@ -497,8 +496,7 @@ function stackBars(gd, sa, sieve) {
497496
i, trace,
498497
j, bar;
499498

500-
var s0 = sa.l2c(sa.c2l(0)),
501-
sRange = [s0, s0];
499+
var sRange = [null, null];
502500

503501
for(i = 0; i < traces.length; i++) {
504502
trace = traces[i];
@@ -518,7 +516,7 @@ function stackBars(gd, sa, sieve) {
518516

519517
if(!barnorm) {
520518
if(isNumeric(sa.c2l(barTop))) expandRange(sRange, barTop);
521-
if(isNumeric(sa.c2l(barBase))) expandRange(sRange, barBase);
519+
if(bar.hasB && isNumeric(sa.c2l(barBase))) expandRange(sRange, barBase);
522520
}
523521
}
524522
}
@@ -584,7 +582,7 @@ function normalizeBars(gd, sa, sieve) {
584582
bar[sLetter] = barTop;
585583

586584
maybeExpand(barTop);
587-
maybeExpand(barBase);
585+
if(bar.hasB) maybeExpand(barBase);
588586
}
589587
}
590588

test/jasmine/tests/bar_test.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -707,6 +707,34 @@ describe('Bar.setPositions', function() {
707707
expect(Axes.getAutoRange(ya)).toBeCloseToArray([-1.11, 1.11], undefined, '(ya.range)');
708708
});
709709

710+
it('should include explicit base in size axis range', function() {
711+
var barmodes = ['stack', 'group', 'overlay'];
712+
barmodes.forEach(function(barmode) {
713+
var gd = mockBarPlot([
714+
{y: [3, 4, -5], base: [-1, -2, 7]}
715+
], {
716+
barmode: barmode
717+
});
718+
719+
var ya = gd._fullLayout.yaxis;
720+
expect(Axes.getAutoRange(ya)).toBeCloseToArray([-2.5, 7.5]);
721+
});
722+
});
723+
724+
it('should not include date zero (1970) in date axis range', function() {
725+
var barmodes = ['stack', 'group', 'overlay'];
726+
barmodes.forEach(function(barmode) {
727+
var gd = mockBarPlot([
728+
{y: ['2017-01-01', '2017-01-03', '2017-01-19']}
729+
], {
730+
barmode: barmode
731+
});
732+
733+
var ya = gd._fullLayout.yaxis;
734+
expect(Axes.getAutoRange(ya)).toEqual(['2016-12-31', '2017-01-20']);
735+
});
736+
});
737+
710738
it('works with log axes (grouped bars)', function() {
711739
var gd = mockBarPlot([
712740
{y: [1, 10, 1e10, -1]},

0 commit comments

Comments
 (0)