Repository: holoviz/holoviews

Issue:
hover values incorrect
#### ALL software version info
holoviews 1.14.2
bokeh 2.2.3
python 3.8.8

#### Description of expected behavior and the observed behavior
I created a plot with an `x` axis that represents a time during the day, then created a new column named `time` converting the value to a string representation of a timestamp.  The values of `x` and `time` shown in the hover tools should match, but do not. 
 As a sanity check of the data stored in the plot, I compared the values of the time to the x column from which it was created, and they still match.

This issue was first observed while using hvPlot, but was also found to occur using holoviews directly.

#### Complete, minimal, self-contained example code that reproduces the issue

```python
import numpy as np
import pandas as pd
import holoviews as hv

hv.extension('bokeh')

weekdays = dict(zip(range(7), ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]))
times = np.linspace(0,24,97)
days = np.linspace(0,6,7)
a = np.dstack(np.meshgrid(times, days)).reshape(-1, 2)
df = (
    pd.DataFrame(a, columns=["x", "day"])
    .sort_values(["day", "x"])
    .assign(
        counts=np.random.rand(len(a)) * 1000,
        day=lambda df: df.day.astype(int).apply(lambda _: weekdays[_]),
        time=lambda df: pd.to_datetime(df.x, unit="h").dt.strftime("%H:%M"),
    )
)

plot = hv.Bars(data=df, kdims=["x", "day"], vdims=["counts", "time"]).opts(stacked=True, height=720, width=1280, cmap="rainbow", xlabel="time", tools=["hover"])

assert (pd.to_datetime(plot.data.x, unit="h").dt.strftime("%H:%M") == plot.data.time).all()

plot
```

#### Screenshots or screencasts of the bug in action
Notice the value of time does not match the value of x.
![image](https://user-images.githubusercontent.com/42480289/114468186-b6e5e080-9bb0-11eb-805c-fbdbd5489a90.png)



Discussion:
Just a quick update that the same behavior occurs on current versions:
holoviews 1.14.3
bokeh 2.3.1


Resolving patch:
diff --git a/holoviews/plotting/bokeh/chart.py b/holoviews/plotting/bokeh/chart.py
--- a/holoviews/plotting/bokeh/chart.py
+++ b/holoviews/plotting/bokeh/chart.py
@@ -695,7 +695,7 @@ class SpikesPlot(SpikesMixin, ColorbarPlot):
 
     selection_display = BokehOverlaySelectionDisplay()
 
-    style_opts = base_properties + line_properties + ['cmap', 'palette'] 
+    style_opts = base_properties + line_properties + ['cmap', 'palette']
 
     _nonvectorized_styles = base_properties + ['cmap']
     _plot_methods = dict(single='segment')
@@ -994,7 +994,10 @@ def get_data(self, element, ranges, style):
                     data['top'].append(ts)
                     data[xdim.name].append(xs)
                     data[stack_dim.name].append(slc_ds.dimension_values(stack_dim))
-                    if hover: data[ydim.name].append(ys)
+                    if hover:
+                        data[ydim.name].append(ys)
+                        for vd in slc_ds.vdims[1:]:
+                            data[vd.name].append(slc_ds.dimension_values(vd))
                     if not style_mapping:
                         self._add_color_data(slc_ds, ranges, style, cdim, data,
                                              mapping, factors, colors)
@@ -1013,7 +1016,7 @@ def get_data(self, element, ranges, style):
                 data[xdim.name].append(ds.dimension_values(xdim))
                 data[ydim.name].append(ds.dimension_values(ydim))
 
-            if hover:
+            if hover and grouping != 'stacked':
                 for vd in ds.vdims[1:]:
                     data[vd.name].append(ds.dimension_values(vd))
 


Test patch: