@@ -2010,13 +2010,6 @@ plots.doAutoMargin = function(gd) {
20102010 var reservedMargins = { t : 0 , b : 0 , l : 0 , r : 0 } ;
20112011 var oldMargins = Lib . extendFlat ( { } , gs ) ;
20122012
2013- var margins = gd . _fullLayout . _reservedMargin ;
2014- for ( var key in margins ) {
2015- for ( var side in margins [ key ] ) {
2016- var val = margins [ key ] [ side ] ;
2017- reservedMargins [ side ] = Math . max ( reservedMargins [ side ] , val ) ;
2018- }
2019- }
20202013 // adjust margins for outside components
20212014 // fullLayout.margin is the requested margin,
20222015 // fullLayout._size has margins and plotsize after adjustment
@@ -2029,11 +2022,18 @@ plots.doAutoMargin = function(gd) {
20292022 var minreducedwidth = fullLayout . minreducedwidth ;
20302023 var minreducedheight = fullLayout . minreducedheight ;
20312024
2032- if ( fullLayout . margin . autoexpand !== false ) {
2025+ if ( margin . autoexpand !== false ) {
20332026 for ( var k in pushMargin ) {
20342027 if ( ! pushMarginIds [ k ] ) delete pushMargin [ k ] ;
20352028 }
20362029
2030+ var margins = gd . _fullLayout . _reservedMargin ;
2031+ for ( var key in margins ) {
2032+ for ( var side in margins [ key ] ) {
2033+ var val = margins [ key ] [ side ] ;
2034+ reservedMargins [ side ] = Math . max ( reservedMargins [ side ] , val ) ;
2035+ }
2036+ }
20372037 // fill in the requested margins
20382038 pushMargin . base = {
20392039 l : { val : 0 , size : ml } ,
@@ -2042,9 +2042,23 @@ plots.doAutoMargin = function(gd) {
20422042 b : { val : 0 , size : mb }
20432043 } ;
20442044
2045+
2046+ // make sure that the reservedMargin is the minimum needed
2047+ for ( var s in reservedMargins ) {
2048+ var autoMarginPush = 0 ;
2049+ for ( var m in pushMargin ) {
2050+ if ( m !== 'base' ) {
2051+ if ( isNumeric ( pushMargin [ m ] [ s ] . size ) ) {
2052+ autoMarginPush = pushMargin [ m ] [ s ] . size > autoMarginPush ? pushMargin [ m ] [ s ] . size : autoMarginPush ;
2053+ }
2054+ }
2055+ }
2056+ var extraMargin = Math . max ( 0 , ( margin [ s ] - autoMarginPush ) ) ;
2057+ reservedMargins [ s ] = Math . max ( 0 , reservedMargins [ s ] - extraMargin ) ;
2058+ }
2059+
20452060 // now cycle through all the combinations of l and r
20462061 // (and t and b) to find the required margins
2047-
20482062 for ( var k1 in pushMargin ) {
20492063 var pushleft = pushMargin [ k1 ] . l || { } ;
20502064 var pushbottom = pushMargin [ k1 ] . b || { } ;
0 commit comments