From bcb896efa17a452512c3b5c398cbe065113d995e Mon Sep 17 00:00:00 2001 From: Philipp Rudiger Date: Wed, 3 Mar 2021 18:31:19 +0100 Subject: [PATCH 1/2] Handle None renderers when merging HoverTool.renderers --- holoviews/plotting/bokeh/element.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/holoviews/plotting/bokeh/element.py b/holoviews/plotting/bokeh/element.py index faa0ed79cd..e7069caee1 100644 --- a/holoviews/plotting/bokeh/element.py +++ b/holoviews/plotting/bokeh/element.py @@ -2284,7 +2284,7 @@ def _merge_tools(self, subplot): if tool: tool_renderers = [] if tool.renderers == 'auto' else tool.renderers hover_renderers = [] if hover.renderers == 'auto' else hover.renderers - renderers = tool_renderers + hover_renderers + renderers = [r for r in tool_renderers + hover_renderers if r is not None] tool.renderers = list(util.unique_iterator(renderers)) if 'hover' not in self.handles: self.handles['hover'] = tool From abf26f36f616e3166cbb3c6f029893b61c82adf9 Mon Sep 17 00:00:00 2001 From: Philipp Rudiger Date: Wed, 3 Mar 2021 18:35:14 +0100 Subject: [PATCH 2/2] Add test --- holoviews/tests/plotting/bokeh/testoverlayplot.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/holoviews/tests/plotting/bokeh/testoverlayplot.py b/holoviews/tests/plotting/bokeh/testoverlayplot.py index cd75c62750..7851e84768 100644 --- a/holoviews/tests/plotting/bokeh/testoverlayplot.py +++ b/holoviews/tests/plotting/bokeh/testoverlayplot.py @@ -76,6 +76,12 @@ def test_hover_tool_instance_renderer_association(self): self.assertIn(curve_plot.handles['glyph_renderer'], curve_plot.handles['hover'].renderers) self.assertEqual(plot.handles['hover'].tooltips, tooltips) + def test_hover_tool_overlay_renderers(self): + overlay = Curve(range(2)).opts(tools=['hover']) * ErrorBars([]).opts(tools=['hover']) + plot = bokeh_renderer.get_plot(overlay) + self.assertEqual(len(plot.handles['hover'].renderers), 1) + self.assertEqual(plot.handles['hover'].tooltips, [('x', '@{x}'), ('y', '@{y}')]) + def test_hover_tool_nested_overlay_renderers(self): overlay1 = NdOverlay({0: Curve(range(2)), 1: Curve(range(3))}, kdims=['Test']) overlay2 = NdOverlay({0: Curve(range(4)), 1: Curve(range(5))}, kdims=['Test'])