@@ -25,13 +25,15 @@ module.exports = function calc(gd, trace) {
2525 var xa = Axes . getFromId ( gd , trace . xaxis || 'x' ) ,
2626 ya = Axes . getFromId ( gd , trace . yaxis || 'y' ) ,
2727 orientation = trace . orientation || ( ( trace . x && ! trace . y ) ? 'h' : 'v' ) ,
28- pos , size , i ;
28+ sa , pos , size , i ;
2929
3030 if ( orientation === 'h' ) {
31+ sa = xa ;
3132 size = xa . makeCalcdata ( trace , 'x' ) ;
3233 pos = ya . makeCalcdata ( trace , 'y' ) ;
3334 }
3435 else {
36+ sa = ya ;
3537 size = ya . makeCalcdata ( trace , 'y' ) ;
3638 pos = xa . makeCalcdata ( trace , 'x' ) ;
3739 }
@@ -40,14 +42,43 @@ module.exports = function calc(gd, trace) {
4042 var serieslen = Math . min ( pos . length , size . length ) ,
4143 cd = [ ] ;
4244
45+ // set position
4346 for ( i = 0 ; i < serieslen ; i ++ ) {
4447
4548 // add bars with non-numeric sizes to calcdata
4649 // so that ensure that traces with gaps are
4750 // plotted in the correct order
4851
4952 if ( isNumeric ( pos [ i ] ) ) {
50- cd . push ( { p : pos [ i ] , s : size [ i ] , b : 0 } ) ;
53+ cd . push ( { p : pos [ i ] } ) ;
54+ }
55+ }
56+
57+ // set base
58+ var base = trace . base ,
59+ b ;
60+
61+ if ( Array . isArray ( base ) ) {
62+ for ( i = 0 ; i < Math . min ( base . length , cd . length ) ; i ++ ) {
63+ b = sa . d2c ( base [ i ] ) ;
64+ cd [ i ] . b = ( isNumeric ( b ) ) ? b : 0 ;
65+ }
66+ for ( ; i < cd . length ; i ++ ) {
67+ cd [ i ] . b = 0 ;
68+ }
69+ }
70+ else {
71+ b = sa . d2c ( base ) ;
72+ b = ( isNumeric ( b ) ) ? b : 0 ;
73+ for ( i = 0 ; i < cd . length ; i ++ ) {
74+ cd [ i ] . b = b ;
75+ }
76+ }
77+
78+ // set size
79+ for ( i = 0 ; i < cd . length ; i ++ ) {
80+ if ( isNumeric ( size [ i ] ) ) {
81+ cd [ i ] . s = size [ i ] ;
5182 }
5283 }
5384
0 commit comments