@@ -471,6 +471,7 @@ function setBaseAndTop(gd, sa, sieve) {
471
471
var calcTrace = calcTraces [ i ] ;
472
472
var fullTrace = calcTrace [ 0 ] . trace ;
473
473
var pts = [ ] ;
474
+ var allBarBaseAboveZero = true ;
474
475
475
476
for ( var j = 0 ; j < calcTrace . length ; j ++ ) {
476
477
var bar = calcTrace [ j ] ;
@@ -480,10 +481,14 @@ function setBaseAndTop(gd, sa, sieve) {
480
481
bar [ sLetter ] = barTop ;
481
482
pts . push ( barTop ) ;
482
483
if ( bar . hasB ) pts . push ( barBase ) ;
484
+
485
+ if ( ! bar . hasB || ! ( bar . b > 0 && bar . s > 0 ) ) {
486
+ allBarBaseAboveZero = false ;
487
+ }
483
488
}
484
489
485
490
fullTrace . _extremes [ sa . _id ] = Axes . findExtremes ( sa , pts , {
486
- tozero : true ,
491
+ tozero : ! allBarBaseAboveZero ,
487
492
padded : true
488
493
} ) ;
489
494
}
@@ -522,6 +527,8 @@ function stackBars(gd, sa, sieve) {
522
527
// if barnorm is set, let normalizeBars update the axis range
523
528
if ( ! barnorm ) {
524
529
fullTrace . _extremes [ sa . _id ] = Axes . findExtremes ( sa , pts , {
530
+ // N.B. we don't stack base with 'base',
531
+ // so set tozero:true always!
525
532
tozero : true ,
526
533
padded : true
527
534
} ) ;
@@ -567,6 +574,7 @@ function normalizeBars(gd, sa, sieve) {
567
574
var calcTrace = calcTraces [ i ] ;
568
575
var fullTrace = calcTrace [ 0 ] . trace ;
569
576
var pts = [ ] ;
577
+ var allBarBaseAboveZero = true ;
570
578
var padded = false ;
571
579
572
580
for ( var j = 0 ; j < calcTrace . length ; j ++ ) {
@@ -588,11 +596,15 @@ function normalizeBars(gd, sa, sieve) {
588
596
pts . push ( barBase ) ;
589
597
padded = padded || needsPadding ( barBase ) ;
590
598
}
599
+
600
+ if ( ! bar . hasB || ! ( bar . b > 0 && bar . s > 0 ) ) {
601
+ allBarBaseAboveZero = false ;
602
+ }
591
603
}
592
604
}
593
605
594
606
fullTrace . _extremes [ sa . _id ] = Axes . findExtremes ( sa , pts , {
595
- tozero : true ,
607
+ tozero : ! allBarBaseAboveZero ,
596
608
padded : padded
597
609
} ) ;
598
610
}
0 commit comments