@@ -347,10 +347,10 @@ function makeSubplotLayer(plotinfo) {
347
347
plotinfo . zerolinelayer = joinLayer ( mainplotinfo . overzero , 'g' , id ) ;
348
348
349
349
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' ) ;
354
354
}
355
355
356
356
// common attributes for all subplots, overlays or not
@@ -368,17 +368,39 @@ function makeSubplotLayer(plotinfo) {
368
368
function purgeSubplotLayers ( layers , fullLayout ) {
369
369
if ( ! layers ) return ;
370
370
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' ;
374
376
375
377
plotgroup . remove ( ) ;
376
- fullLayout . _draggers . selectAll ( 'g.' + subplot ) . remove ( ) ;
378
+ fullLayout . _draggers . selectAll ( 'g.' + subplotId ) . remove ( ) ;
377
379
fullLayout . _defs . select ( '#' + clipId ) . remove ( ) ;
378
380
381
+ overlayIdsToRemove [ subplotId ] = true ;
382
+
379
383
// do not remove individual axis <clipPath>s here
380
384
// as other subplots may need them
381
385
} ) ;
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
+ }
382
404
}
383
405
384
406
function joinLayer ( parent , nodeType , className ) {
0 commit comments