Skip to content

Commit

Permalink
Merge pull request #763 from ioam/bokeh_path_fixes
Browse files Browse the repository at this point in the history
Fixes for Bokeh path plots
  • Loading branch information
jlstevens committed Jul 7, 2016
2 parents 0dff793 + e38fdbb commit 925defc
Showing 1 changed file with 27 additions and 4 deletions.
31 changes: 27 additions & 4 deletions holoviews/plotting/bokeh/path.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from ...core import util
from ..util import map_colors
from .element import ElementPlot, line_properties, fill_properties
from .util import get_cmap
from .util import get_cmap, rgb2hex


class PathPlot(ElementPlot):
Expand All @@ -17,14 +17,34 @@ class PathPlot(ElementPlot):
Whether to show legend for the plot.""")

style_opts = ['color'] + line_properties
_plot_methods = dict(single='multi_line')
_plot_methods = dict(single='multi_line', batched='multi_line')
_mapping = dict(xs='xs', ys='ys')

def get_data(self, element, ranges=None, empty=False):
xs = [] if empty else [path[:, 0] for path in element.data]
ys = [] if empty else [path[:, 1] for path in element.data]
return dict(xs=xs, ys=ys), self._mapping

def get_batched_data(self, element, ranges=None, empty=False):
data = defaultdict(list)
style = self.style.max_cycles(len(self.ordering))
for key, el in element.data.items():
self.overlay_dims = dict(zip(element.kdims, key))
eldata, elmapping = self.get_data(el, ranges, empty)
for k, eld in eldata.items():
data[k].extend(eld)
zorder = self.get_zorder(element, key, el)
val = style[zorder].get('color')
elmapping['color'] = 'color'
if isinstance(val, tuple):
val = rgb2hex(val)
data['color'] += [val for _ in range(len(eldata['xs']))]
if len(set(data.get('color'))) == 1:
data.pop('color')
elmapping.pop('color')

return data, elmapping


class PolygonPlot(PathPlot):

Expand All @@ -36,8 +56,10 @@ def _init_tools(self, element):
Processes the list of tools to be supplied to the plot.
"""
tools = self.default_tools + self.tools
if 'hover' not in tools:
return tools
tools.pop(tools.index('hover'))
if self.batched:
element = element.last
dims = self.hmap.last.kdims
else:
dims = self.overlay_dims.keys()
Expand All @@ -62,10 +84,11 @@ def get_data(self, element, ranges=None, empty=False):
mapping['color'] = 'color'
data['color'] = [] if empty else list(colors)*len(element.data)
dim_name = util.dimension_sanitizer(element.vdims[0].name)
data[dim_name] = [element.level for _ in range(len(xs))]
if 'hover' in self.tools+self.default_tools:
for k, v in self.overlay_dims.items():
dim = util.dimension_sanitizer(k.name)
data[dim] = [v for _ in range(len(xs))]
data[dim_name] = [element.level for _ in range(len(xs))]

return data, mapping

Expand Down

0 comments on commit 925defc

Please sign in to comment.