Skip to content
27 changes: 22 additions & 5 deletions src/plots/plots.js
Original file line number Diff line number Diff line change
Expand Up @@ -2010,11 +2010,14 @@ plots.doAutoMargin = function(gd) {
var reservedMargins = {t: 0, b: 0, l: 0, r: 0};
var oldMargins = Lib.extendFlat({}, gs);

var margins = gd._fullLayout._reservedMargin;
for(var key in margins) {
for(var side in margins[key]) {
var val = margins[key][side];
reservedMargins[side] = Math.max(reservedMargins[side], val);
// only account for reservedMargins if autoexpand
if(margin.autoexpand !== false) {
var margins = gd._fullLayout._reservedMargin;
for(var key in margins) {
for(var side in margins[key]) {
var val = margins[key][side];
reservedMargins[side] = Math.max(reservedMargins[side], val);
}
}
}
// adjust margins for outside components
Expand Down Expand Up @@ -2045,6 +2048,20 @@ plots.doAutoMargin = function(gd) {
// now cycle through all the combinations of l and r
// (and t and b) to find the required margins

// make sure that the reservedMargin is the minimum needed
for(var s in reservedMargins) {
var autoMarginPush = 0;
for(var m in pushMargin) {
if(m !== 'base') {
if(isNumeric(pushMargin[m][s].size)) {
autoMarginPush += pushMargin[m][s].size;
}
}
}
var extraMargin = Math.max(0, (margin[s] - autoMarginPush));
reservedMargins[s] = Math.max(0, reservedMargins[s] - extraMargin);
}

for(var k1 in pushMargin) {
var pushleft = pushMargin[k1].l || {};
var pushbottom = pushMargin[k1].b || {};
Expand Down