@@ -460,75 +460,72 @@ function updatePositionAxis(gd, pa, sieve, allowMinDtick) {
460
460
}
461
461
}
462
462
463
- function expandRange ( range , newValue ) {
464
- if ( isNumeric ( range [ 0 ] ) ) range [ 0 ] = Math . min ( range [ 0 ] , newValue ) ;
465
- else range [ 0 ] = newValue ;
466
-
467
- if ( isNumeric ( range [ 1 ] ) ) range [ 1 ] = Math . max ( range [ 1 ] , newValue ) ;
468
- else range [ 1 ] = newValue ;
469
- }
470
-
471
463
// store these bar bases and tops in calcdata
472
464
// and make sure the size axis includes zero,
473
465
// along with the bases and tops of each bar.
474
466
function setBaseAndTop ( gd , sa , sieve ) {
475
467
var calcTraces = sieve . traces ;
476
468
var sLetter = getAxisLetter ( sa ) ;
477
- var sRange = [ null , null ] ;
478
469
479
470
for ( var i = 0 ; i < calcTraces . length ; i ++ ) {
480
471
var calcTrace = calcTraces [ i ] ;
472
+ var fullTrace = calcTrace [ 0 ] . trace ;
473
+ var pts = [ ] ;
481
474
482
475
for ( var j = 0 ; j < calcTrace . length ; j ++ ) {
483
476
var bar = calcTrace [ j ] ;
484
477
var barBase = bar . b ;
485
478
var barTop = barBase + bar . s ;
486
479
487
480
bar [ sLetter ] = barTop ;
488
-
489
- if ( isNumeric ( sa . c2l ( barTop ) ) ) expandRange ( sRange , barTop ) ;
490
- if ( bar . hasB && isNumeric ( sa . c2l ( barBase ) ) ) expandRange ( sRange , barBase ) ;
481
+ pts . push ( barTop ) ;
482
+ if ( bar . hasB ) pts . push ( barBase ) ;
491
483
}
492
- }
493
484
494
- var extremes = Axes . findExtremes ( sa , sRange , { tozero : true , padded : true } ) ;
495
- putExtremes ( calcTraces , sa , extremes ) ;
485
+ fullTrace . _extremes [ sa . _id ] = Axes . findExtremes ( sa , pts , {
486
+ tozero : true ,
487
+ padded : true
488
+ } ) ;
489
+ }
496
490
}
497
491
498
492
function stackBars ( gd , sa , sieve ) {
499
493
var fullLayout = gd . _fullLayout ;
500
494
var barnorm = fullLayout . barnorm ;
501
495
var sLetter = getAxisLetter ( sa ) ;
502
496
var calcTraces = sieve . traces ;
503
- var sRange = [ null , null ] ;
504
497
505
498
for ( var i = 0 ; i < calcTraces . length ; i ++ ) {
506
499
var calcTrace = calcTraces [ i ] ;
500
+ var fullTrace = calcTrace [ 0 ] . trace ;
501
+ var pts = [ ] ;
507
502
508
503
for ( var j = 0 ; j < calcTrace . length ; j ++ ) {
509
504
var bar = calcTrace [ j ] ;
510
505
511
- if ( bar . s === BADNUM ) continue ;
512
-
513
- // stack current bar and get previous sum
514
- var barBase = sieve . put ( bar . p , bar . b + bar . s ) ;
515
- var barTop = barBase + bar . b + bar . s ;
506
+ if ( bar . s !== BADNUM ) {
507
+ // stack current bar and get previous sum
508
+ var barBase = sieve . put ( bar . p , bar . b + bar . s ) ;
509
+ var barTop = barBase + bar . b + bar . s ;
516
510
517
- // store the bar base and top in each calcdata item
518
- bar . b = barBase ;
519
- bar [ sLetter ] = barTop ;
511
+ // store the bar base and top in each calcdata item
512
+ bar . b = barBase ;
513
+ bar [ sLetter ] = barTop ;
520
514
521
- if ( ! barnorm ) {
522
- if ( isNumeric ( sa . c2l ( barTop ) ) ) expandRange ( sRange , barTop ) ;
523
- if ( bar . hasB && isNumeric ( sa . c2l ( barBase ) ) ) expandRange ( sRange , barBase ) ;
515
+ if ( ! barnorm ) {
516
+ pts . push ( barTop ) ;
517
+ if ( bar . hasB ) pts . push ( barBase ) ;
518
+ }
524
519
}
525
520
}
526
- }
527
521
528
- // if barnorm is set, let normalizeBars update the axis range
529
- if ( ! barnorm ) {
530
- var extremes = Axes . findExtremes ( sa , sRange , { tozero : true , padded : true } ) ;
531
- putExtremes ( calcTraces , sa , extremes ) ;
522
+ // if barnorm is set, let normalizeBars update the axis range
523
+ if ( ! barnorm ) {
524
+ fullTrace . _extremes [ sa . _id ] = Axes . findExtremes ( sa , pts , {
525
+ tozero : true ,
526
+ padded : true
527
+ } ) ;
528
+ }
532
529
}
533
530
}
534
531
@@ -551,53 +548,53 @@ function sieveBars(gd, sa, sieve) {
551
548
// normalizeBars requires that either sieveBars or stackBars has been
552
549
// previously invoked.
553
550
function normalizeBars ( gd , sa , sieve ) {
551
+ var fullLayout = gd . _fullLayout ;
554
552
var calcTraces = sieve . traces ;
555
553
var sLetter = getAxisLetter ( sa ) ;
556
- var sTop = ( gd . _fullLayout . barnorm === 'fraction' ) ? 1 : 100 ;
554
+ var sTop = fullLayout . barnorm === 'fraction' ? 1 : 100 ;
557
555
var sTiny = sTop / 1e9 ; // in case of rounding error in sum
558
556
var sMin = sa . l2c ( sa . c2l ( 0 ) ) ;
559
- var sMax = ( gd . _fullLayout . barmode === 'stack' ) ? sTop : sMin ;
560
- var sRange = [ sMin , sMax ] ;
561
- var padded = false ;
557
+ var sMax = fullLayout . barmode === 'stack' ? sTop : sMin ;
562
558
563
- function maybeExpand ( newValue ) {
564
- if ( isNumeric ( sa . c2l ( newValue ) ) &&
565
- ( ( newValue < sMin - sTiny ) || ( newValue > sMax + sTiny ) || ! isNumeric ( sMin ) )
566
- ) {
567
- padded = true ;
568
- expandRange ( sRange , newValue ) ;
569
- }
559
+ function needsPadding ( v ) {
560
+ return (
561
+ isNumeric ( sa . c2l ( v ) ) &&
562
+ ( ( v < sMin - sTiny ) || ( v > sMax + sTiny ) || ! isNumeric ( sMin ) )
563
+ ) ;
570
564
}
571
565
572
566
for ( var i = 0 ; i < calcTraces . length ; i ++ ) {
573
567
var calcTrace = calcTraces [ i ] ;
568
+ var fullTrace = calcTrace [ 0 ] . trace ;
569
+ var pts = [ ] ;
570
+ var padded = false ;
574
571
575
572
for ( var j = 0 ; j < calcTrace . length ; j ++ ) {
576
573
var bar = calcTrace [ j ] ;
577
574
578
- if ( bar . s === BADNUM ) continue ;
575
+ if ( bar . s !== BADNUM ) {
576
+ var scale = Math . abs ( sTop / sieve . get ( bar . p , bar . s ) ) ;
577
+ bar . b *= scale ;
578
+ bar . s *= scale ;
579
579
580
- var scale = Math . abs ( sTop / sieve . get ( bar . p , bar . s ) ) ;
581
- bar . b *= scale ;
582
- bar . s *= scale ;
580
+ var barBase = bar . b ;
581
+ var barTop = barBase + bar . s ;
583
582
584
- var barBase = bar . b ;
585
- var barTop = barBase + bar . s ;
586
- bar [ sLetter ] = barTop ;
583
+ bar [ sLetter ] = barTop ;
584
+ pts . push ( barTop ) ;
585
+ padded = padded || needsPadding ( barTop ) ;
587
586
588
- maybeExpand ( barTop ) ;
589
- if ( bar . hasB ) maybeExpand ( barBase ) ;
587
+ if ( bar . hasB ) {
588
+ pts . push ( barBase ) ;
589
+ padded = padded || needsPadding ( barBase ) ;
590
+ }
591
+ }
590
592
}
591
- }
592
-
593
- // update range of size axis
594
- var extremes = Axes . findExtremes ( sa , sRange , { tozero : true , padded : padded } ) ;
595
- putExtremes ( calcTraces , sa , extremes ) ;
596
- }
597
593
598
- function putExtremes ( cd , ax , extremes ) {
599
- for ( var i = 0 ; i < cd . length ; i ++ ) {
600
- cd [ i ] [ 0 ] . trace . _extremes [ ax . _id ] = extremes ;
594
+ fullTrace . _extremes [ sa . _id ] = Axes . findExtremes ( sa , pts , {
595
+ tozero : true ,
596
+ padded : padded
597
+ } ) ;
601
598
}
602
599
}
603
600
0 commit comments