diff --git a/holoviews/element/raster.py b/holoviews/element/raster.py index 5c8af06500..8e1fc421d0 100644 --- a/holoviews/element/raster.py +++ b/holoviews/element/raster.py @@ -12,7 +12,7 @@ Overlay, Element, Dataset, NdElement) from ..core.boundingregion import BoundingRegion, BoundingBox from ..core.sheetcoords import SheetCoordinateSystem -from ..core.util import pd +from ..core.util import pd, max_range from .chart import Curve from .tabular import Table from .util import compute_edges, compute_slice_bounds, categorical_aggregate2d @@ -76,6 +76,21 @@ def __getitem__(self, slices): extents=None) + def range(self, dim, data_range=True): + idx = self.get_dimension_index(dim) + if data_range and idx == 2: + dimension = self.get_dimension(dim) + drange = self.data.min(), self.data.max() + drange = max_range([drange, dimension.soft_range]) + if dimension.range[0] is not None: + return (dimension.range[0], drange[1]) + elif dimension.range[1] is not None: + return (drange[0], dimension.range[1]) + else: + return drange + return super(Raster, self).range(dim, data_range) + + def dimension_values(self, dim, expanded=True, flat=True): """ The set of samples available along a particular dimension. diff --git a/tests/testraster.py b/tests/testraster.py index f9ad53d26d..819843be7b 100644 --- a/tests/testraster.py +++ b/tests/testraster.py @@ -38,3 +38,15 @@ def test_image_sample(self): self.assertEqual(image.sample(y=0.25), Curve(np.array([(-0.333333, 0), (0, 1), (0.333333, 2)]), kdims=['x'], vdims=['z'])) + + def test_raster_range_masked(self): + arr = np.random.rand(10,10)-0.5 + arr = np.ma.masked_where(arr<=0, arr) + rrange = Raster(arr).range(2) + self.assertEqual(rrange, (np.min(arr), np.max(arr))) + + def test_image_range_masked(self): + arr = np.random.rand(10,10)-0.5 + arr = np.ma.masked_where(arr<=0, arr) + rrange = Image(arr).range(2) + self.assertEqual(rrange, (np.min(arr), np.max(arr)))