diff --git a/holoviews/plotting/bokeh/chart.py b/holoviews/plotting/bokeh/chart.py index 3b2e9166f0..e1d0c31f7e 100644 --- a/holoviews/plotting/bokeh/chart.py +++ b/holoviews/plotting/bokeh/chart.py @@ -661,8 +661,14 @@ def _get_factors(self, element): Get factors for categorical axes. """ xdim, ydim = element.dimensions()[:2] - gdim = element.get_dimension(self.group_index) - sdim = element.get_dimension(self.stack_index) + if self.group_index and self.group_index < element.ndims: + gdim = element.get_dimension(self.group_index) + else: + gdim = None + if self.stack_index and self.stack_index < element.ndims: + sdim = element.get_dimension(self.stack_index) + else: + sdim = None xvals = element.dimension_values(0, False) xvals = [x if xvals.dtype.kind in 'SU' else xdim.pprint_value(x) for x in xvals] if bokeh_version >= '0.12.7' and gdim and not sdim: @@ -683,7 +689,10 @@ def _get_axis_labels(self, *args, **kwargs): if self.batched: element = element.last xlabel = dim_axis_label(element.kdims[0]) - gdim = element.get_dimension(self.group_index) + if self.group_index and self.group_index < element.ndims: + gdim = element.get_dimension(self.group_index) + else: + gdim = None if bokeh_version >= '0.12.7' and gdim: xlabel = ', '.join([xlabel, dim_axis_label(gdim)]) return (xlabel, dim_axis_label(element.vdims[0]), None) @@ -728,8 +737,14 @@ def _glyph_properties(self, *args): def get_data(self, element, ranges, empty): # Get x, y, group, stack and color dimensions - group_dim = element.get_dimension(self.group_index) - stack_dim = element.get_dimension(self.stack_index) + if self.group_index and self.group_index < element.ndims: + group_dim = element.get_dimension(self.group_index) + else: + group_dim = None + if self.stack_index and self.stack_index < element.ndims: + stack_dim = element.get_dimension(self.stack_index) + else: + stack_dim = None if stack_dim: group_dim = stack_dim grouping = 'stacked' diff --git a/holoviews/plotting/bokeh/element.py b/holoviews/plotting/bokeh/element.py index dbcc8a2a7a..b3b9f43aae 100644 --- a/holoviews/plotting/bokeh/element.py +++ b/holoviews/plotting/bokeh/element.py @@ -559,9 +559,9 @@ def _update_ranges(self, element, ranges): if any(isinstance(ax_range, FactorRange) for ax_range in [x_range, y_range]): xfactors, yfactors = self._get_factors(element) framewise = self.framewise - if not self.drawn or (not self.model_changed(x_range) and framewise): + if not self.drawn or (not self.model_changed(x_range) and framewise) or xfactors: self._update_range(x_range, l, r, xfactors, self.invert_xaxis, self._shared['x'], self.logx) - if not self.drawn or (not self.model_changed(y_range) and framewise): + if not self.drawn or (not self.model_changed(y_range) and framewise) or yfactors: self._update_range(y_range, b, t, yfactors, self.invert_yaxis, self._shared['y'], self.logy)