From 49102a287496e08a7a08d71c552eb4e037a6ac25 Mon Sep 17 00:00:00 2001
From: Philipp Rudiger
Date: Sat, 27 Feb 2016 17:09:43 +0000
Subject: [PATCH] Fixed bug in bokeh hover tool for unsanitized dimensions
---
holoviews/plotting/bokeh/chart.py | 14 +++-----------
holoviews/plotting/bokeh/element.py | 14 +++++++++++++-
2 files changed, 16 insertions(+), 12 deletions(-)
diff --git a/holoviews/plotting/bokeh/chart.py b/holoviews/plotting/bokeh/chart.py
index 57aba041e9..aca2badb04 100644
--- a/holoviews/plotting/bokeh/chart.py
+++ b/holoviews/plotting/bokeh/chart.py
@@ -77,9 +77,7 @@ def get_data(self, element, ranges=None, empty=False):
data[dims[0]] = [] if empty else element.dimension_values(0)
data[dims[1]] = [] if empty else element.dimension_values(1)
- if 'hover' in self.tools+self.default_tools:
- for d in dims:
- data[d] = [] if empty else element.dimension_values(d)
+ self._get_hover_data(data, element, empty)
return data, mapping
@@ -178,10 +176,7 @@ def get_data(self, element, ranges=None, empty=None):
else:
data = dict(top=element.values, left=element.edges[:-1],
right=element.edges[1:])
-
- if 'hover' in self.default_tools + self.tools:
- data.update({d: [] if empty else element.dimension_values(d)
- for d in element.dimensions(label=True)})
+ self._get_hover_data(data, element, empty)
return (data, mapping)
@@ -221,10 +216,7 @@ def get_data(self, element, ranges=None, empty=None):
cmap = get_cmap(style.get('cmap', style.get('palette', None)))
data['color'] = [] if empty else map_colors(vals, main_range, cmap)
mapping['fill_color'] = 'color'
-
- if 'hover' in self.default_tools + self.tools:
- data.update({d: [] if empty else element.dimension_values(d)
- for d in element.dimensions(label=True)})
+ self._get_hover_data(data, element, empty)
return (data, mapping)
diff --git a/holoviews/plotting/bokeh/element.py b/holoviews/plotting/bokeh/element.py
index 8cf4afeadf..b7befab1f5 100644
--- a/holoviews/plotting/bokeh/element.py
+++ b/holoviews/plotting/bokeh/element.py
@@ -160,11 +160,23 @@ def _init_tools(self, element):
"""
tools = self.default_tools + self.tools
if 'hover' in tools:
- tooltips = [(d, '@'+d) for d in element.dimensions(label=True)]
+ tooltips = [(d.pprint_label, '@'+util.dimension_sanitizer(d.name))
+ for d in element.dimensions()]
tools[tools.index('hover')] = HoverTool(tooltips=tooltips)
return tools
+ def _get_hover_data(self, data, element, empty=False):
+ """
+ Initializes hover data based on Element dimension values.
+ If empty initializes with no data.
+ """
+ if 'hover' in self.default_tools + self.tools:
+ for d in element.dimensions(label=True):
+ sanitized = dimension_sanitizer(d)
+ data[sanitized] = [] if empty else element.dimension_values(d)
+
+
def _axes_props(self, plots, subplots, element, ranges):
dims = element.dimensions()
xlabel, ylabel, zlabel = self._axis_labels(element, subplots)