@@ -648,14 +648,20 @@ def _get_hover_data(self, data, element, dimensions=None):
648648 If empty initializes with no data.
649649
650650 """
651- if 'hover' not in self .handles or self .static_source :
651+ if 'hover' not in self .handles and not self .overlay_dims :
652652 return
653653
654- for d in (dimensions or element .dimensions ()):
655- dim = util .dimension_sanitizer (d .name )
656- if dim not in data :
657- data [dim ] = element .dimension_values (d )
654+ if 'hover' in self .handles and not self .static_source :
655+ for d in (dimensions or element .dimensions ()):
656+ dim = util .dimension_sanitizer (d .name )
657+ if dim not in data :
658+ data [dim ] = element .dimension_values (d )
659+
660+ if not data :
661+ return
658662
663+ # Always add overlay_dims to data, as these identify the element in the overlay
664+ # and are needed for hover tooltips even when the subplot doesn't have its own hover tool
659665 for k , v in self .overlay_dims .items ():
660666 dim = util .dimension_sanitizer (k .name )
661667 if dim not in data :
@@ -3596,6 +3602,14 @@ def update_frame(self, key, ranges=None, element=None):
35963602 if not self .tabs :
35973603 init_kwargs ['plot' ] = self .handles ['plot' ]
35983604 self ._create_dynamic_subplots (key , items , ranges , ** init_kwargs )
3605+ if overlay_hover := self .handles .get ('hover' ):
3606+ if overlay_hover .renderers == 'auto' :
3607+ overlay_hover .renderers = []
3608+ for k , _ in items :
3609+ if k in self .subplots and 'glyph_renderer' in self .subplots [k ].handles :
3610+ renderer = self .subplots [k ].handles ['glyph_renderer' ]
3611+ if renderer not in overlay_hover .renderers :
3612+ overlay_hover .renderers .append (renderer )
35993613 if not self .overlaid and not self .tabs :
36003614 self ._process_legend (element )
36013615
0 commit comments