@@ -347,10 +347,10 @@ function makeSubplotLayer(plotinfo) {
347347 plotinfo . zerolinelayer = joinLayer ( mainplotinfo . overzero , 'g' , id ) ;
348348
349349 plotinfo . plot = joinLayer ( mainplotinfo . overplot , 'g' , id ) ;
350- plotinfo . xlines = joinLayer ( mainplotinfo . overlines , 'path' , id ) ;
351- plotinfo . ylines = joinLayer ( mainplotinfo . overlines , 'path' , id ) ;
352- plotinfo . xaxislayer = joinLayer ( mainplotinfo . overaxes , 'g' , id ) ;
353- plotinfo . yaxislayer = joinLayer ( mainplotinfo . overaxes , 'g' , id ) ;
350+ plotinfo . xlines = joinLayer ( mainplotinfo . overlines , 'path' , id + '-x' ) ;
351+ plotinfo . ylines = joinLayer ( mainplotinfo . overlines , 'path' , id + '-y' ) ;
352+ plotinfo . xaxislayer = joinLayer ( mainplotinfo . overaxes , 'g' , id + '-x' ) ;
353+ plotinfo . yaxislayer = joinLayer ( mainplotinfo . overaxes , 'g' , id + '-y' ) ;
354354 }
355355
356356 // common attributes for all subplots, overlays or not
@@ -368,17 +368,39 @@ function makeSubplotLayer(plotinfo) {
368368function purgeSubplotLayers ( layers , fullLayout ) {
369369 if ( ! layers ) return ;
370370
371- layers . each ( function ( subplot ) {
372- var plotgroup = d3 . select ( this ) ,
373- clipId = 'clip' + fullLayout . _uid + subplot + 'plot' ;
371+ var overlayIdsToRemove = { } ;
372+
373+ layers . each ( function ( subplotId ) {
374+ var plotgroup = d3 . select ( this ) ;
375+ var clipId = 'clip' + fullLayout . _uid + subplotId + 'plot' ;
374376
375377 plotgroup . remove ( ) ;
376- fullLayout . _draggers . selectAll ( 'g.' + subplot ) . remove ( ) ;
378+ fullLayout . _draggers . selectAll ( 'g.' + subplotId ) . remove ( ) ;
377379 fullLayout . _defs . select ( '#' + clipId ) . remove ( ) ;
378380
381+ overlayIdsToRemove [ subplotId ] = true ;
382+
379383 // do not remove individual axis <clipPath>s here
380384 // as other subplots may need them
381385 } ) ;
386+
387+ // must remove overlaid subplot trace layers 'manually'
388+
389+ var subplots = fullLayout . _plots ;
390+ var subplotIds = Object . keys ( subplots ) ;
391+
392+ for ( var i = 0 ; i < subplotIds . length ; i ++ ) {
393+ var subplotInfo = subplots [ subplotIds [ i ] ] ;
394+ var overlays = subplotInfo . overlays || [ ] ;
395+
396+ for ( var j = 0 ; j < overlays . length ; j ++ ) {
397+ var overlayInfo = overlays [ j ] ;
398+
399+ if ( overlayIdsToRemove [ overlayInfo . id ] ) {
400+ overlayInfo . plot . selectAll ( '.trace' ) . remove ( ) ;
401+ }
402+ }
403+ }
382404}
383405
384406function joinLayer ( parent , nodeType , className ) {
0 commit comments