From c2e1da0c19510f65f03af3c49b89c30dd92c6f85 Mon Sep 17 00:00:00 2001 From: Philipp Rudiger Date: Thu, 9 May 2019 11:37:35 +0200 Subject: [PATCH 1/2] Fix updates to Overlay with variable items --- holoviews/plotting/bokeh/element.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/holoviews/plotting/bokeh/element.py b/holoviews/plotting/bokeh/element.py index 7d309642b9..8c6c6a2018 100644 --- a/holoviews/plotting/bokeh/element.py +++ b/holoviews/plotting/bokeh/element.py @@ -2130,16 +2130,16 @@ def update_frame(self, key, ranges=None, element=None): if element is not None: ranges = self.compute_ranges(range_obj, key, ranges) - # Update plot options - plot_opts = self.lookup_options(element, 'plot').options - inherited = self._traverse_options(element, 'plot', - self._propagate_options, - defaults=False) - plot_opts.update(**{k: v[0] for k, v in inherited.items() if k not in plot_opts}) - self.param.set_param(**plot_opts) - - if element and not self.overlaid and not self.tabs and not self.batched: - self._update_ranges(element, ranges) + # Update plot options + plot_opts = self.lookup_options(element, 'plot').options + inherited = self._traverse_options(element, 'plot', + self._propagate_options, + defaults=False) + plot_opts.update(**{k: v[0] for k, v in inherited.items() if k not in plot_opts}) + self.param.set_param(**plot_opts) + + if not self.overlaid and not self.tabs and not self.batched: + self._update_ranges(element, ranges) # Determine which stream (if any) triggered the update triggering = [stream for stream in self.streams if stream._triggering] From a450c23a32c8014bcf140232a2b44d50fd908eee Mon Sep 17 00:00:00 2001 From: Philipp Rudiger Date: Thu, 16 May 2019 12:16:47 +0200 Subject: [PATCH 2/2] Add test --- holoviews/tests/plotting/bokeh/testoverlayplot.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/holoviews/tests/plotting/bokeh/testoverlayplot.py b/holoviews/tests/plotting/bokeh/testoverlayplot.py index 83a12859ae..9cf6868399 100644 --- a/holoviews/tests/plotting/bokeh/testoverlayplot.py +++ b/holoviews/tests/plotting/bokeh/testoverlayplot.py @@ -3,6 +3,7 @@ from holoviews.core import NdOverlay, HoloMap, DynamicMap, Overlay from holoviews.core.options import Cycle from holoviews.element import Curve, Points, ErrorBars, Text, VLine +from holoviews.streams import Stream from holoviews.util import Dynamic from .testplot import TestBokehPlot, bokeh_renderer @@ -278,3 +279,12 @@ def test_dynamicmap_legend_updates_add_dynamic_plots(self): legend_labels = [item.label for item in plot.state.legend[0].items] self.assertEqual(legend_labels, [{'value': 'A'}, {'value': 'B'}, {'value': 'C'}]) + def test_dynamicmap_ndoverlay_shrink_number_of_items(self): + selected = Stream.define('selected', items=3)() + def callback(items): + return NdOverlay({j: Overlay([Curve([1, 2, j])]) for j in range(items)}) + dmap = DynamicMap(callback, streams=[selected]) + plot = bokeh_renderer.get_plot(dmap) + selected.event(items=2) + self.assertEqual(len([r for r in plot.state.renderers if r.visible]), 2) +