diff --git a/holoviews/core/data/dictionary.py b/holoviews/core/data/dictionary.py index 28cc115b0a..f965e204c1 100644 --- a/holoviews/core/data/dictionary.py +++ b/holoviews/core/data/dictionary.py @@ -217,7 +217,7 @@ def values(cls, dataset, dim, expanded=True, flat=True): else: if not expanded: return util.unique_array(values) - values = np.array(values) + values = np.asarray(values) return values diff --git a/holoviews/core/util.py b/holoviews/core/util.py index b539d15497..973689c7e2 100644 --- a/holoviews/core/util.py +++ b/holoviews/core/util.py @@ -838,7 +838,10 @@ def unique_array(arr): if not len(arr): return arr elif pd: - return pd.unique(arr) + unique = pd.unique(arr) + if isinstance(arr, np.ndarray) and unique.dtype != arr.dtype: + return unique.astype(arr.dtype) + return unique else: arr = np.asarray(arr) _, uniq_inds = np.unique(arr, return_index=True) diff --git a/holoviews/plotting/bokeh/graphs.py b/holoviews/plotting/bokeh/graphs.py index f340666f61..3803ef565a 100644 --- a/holoviews/plotting/bokeh/graphs.py +++ b/holoviews/plotting/bokeh/graphs.py @@ -93,6 +93,7 @@ def _get_edge_colors(self, element, ranges, edge_data, edge_mapping, style): field = dimension_sanitizer(cdim.name) cvals = element.dimension_values(cdim) if idx in self._node_columns: + print(element.nodes.interface) factors = element.nodes.dimension_values(2, expanded=False) elif idx == 2 and cvals.dtype.kind in 'if': factors = None diff --git a/tests/testbokehgraphs.py b/tests/testbokehgraphs.py index 7a2ed25a5d..00ff9ca0b3 100644 --- a/tests/testbokehgraphs.py +++ b/tests/testbokehgraphs.py @@ -34,7 +34,7 @@ def setUp(self): self.weights = np.random.rand(N) self.graph = Graph(((self.source, self.target),)) self.node_info = Dataset(['Output']+['Input']*(N-1), vdims=['Label']) - self.node_info2 = Dataset(self.weights, vdims='Weight') + self.node_info2 = Dataset(self.weights, vdims='Weight', datatype=['dictionary']) self.graph2 = Graph(((self.source, self.target), self.node_info)) self.graph3 = Graph(((self.source, self.target), self.node_info2), datatype=['dictionary']) self.graph4 = Graph(((self.source, self.target, self.weights),), vdims='Weight')