diff --git a/CHANGES.rst b/CHANGES.rst index c72be14d78..daba79a73f 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -136,6 +136,8 @@ Cubeviz Imviz ^^^^^ +- Histogram in Plot Options no longer stalls for a very large image. [#2735] + Mosviz ^^^^^^ diff --git a/jdaviz/configs/default/plugins/plot_options/plot_options.py b/jdaviz/configs/default/plugins/plot_options/plot_options.py index 4ad3f377f3..ef78823fdf 100644 --- a/jdaviz/configs/default/plugins/plot_options/plot_options.py +++ b/jdaviz/configs/default/plugins/plot_options/plot_options.py @@ -973,8 +973,12 @@ def _update_stretch_histogram(self, msg={}): x_max = x_limits.max() y_min = max(y_limits.min(), 0) y_max = y_limits.max() - arr = comp.data[y_min:y_max, x_min:x_max] + if self.config == "imviz": + # Downsample input data to about 400px (as per compass.vue) for performance. + xstep = max(1, round(arr.shape[1] / 400)) + ystep = max(1, round(arr.shape[0] / 400)) + arr = arr[::ystep, ::xstep] sub_data = arr.ravel() else: @@ -995,8 +999,14 @@ def _update_stretch_histogram(self, msg={}): sub_data = comp.data[inds].ravel() else: - # include all data, regardless of zoom limits - arr = comp.data + if self.config == "imviz": + # Downsample input data to about 400px (as per compass.vue) for performance. + xstep = max(1, round(data.shape[1] / 400)) + ystep = max(1, round(data.shape[0] / 400)) + arr = comp[::ystep, ::xstep] + else: + # include all data, regardless of zoom limits + arr = comp.data sub_data = arr.ravel() # filter out nans (or else bqplot will fail)