diff --git a/docs/changelog.rst b/docs/changelog.rst index 4595231..cb591f9 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -8,6 +8,10 @@ Changes - Histogram plots of points and vector layers are now coloured with their napari colourmap. - Added support for Matplotlib 3.8 +Bug fixes +~~~~~~~~~ +- Use integer bin limits for integer images in ``HistogramWidget`` + 1.1.0 ----- Additions diff --git a/src/napari_matplotlib/histogram.py b/src/napari_matplotlib/histogram.py index 27f328a..2db2f08 100644 --- a/src/napari_matplotlib/histogram.py +++ b/src/napari_matplotlib/histogram.py @@ -4,7 +4,12 @@ import numpy as np import numpy.typing as npt from matplotlib.container import BarContainer -from qtpy.QtWidgets import QComboBox, QLabel, QVBoxLayout, QWidget +from qtpy.QtWidgets import ( + QComboBox, + QLabel, + QVBoxLayout, + QWidget, +) from .base import SingleAxesWidget from .features import FEATURES_LAYER_TYPES @@ -65,20 +70,26 @@ def draw(self) -> None: # Important to calculate bins after slicing 3D data, to avoid reading # whole cube into memory. - bins = np.linspace(np.min(data), np.max(data), 100) + if data.dtype.kind in {"i", "u"}: + # Make sure integer data types have integer sized bins + step = abs(np.max(data) - np.min(data)) // 100 + step = max(1, step) + bins = np.arange(np.min(data), np.max(data) + step, step) + else: + bins = np.linspace(np.min(data), np.max(data), 100) if layer.rgb: # Histogram RGB channels independently for i, c in enumerate("rgb"): self.axes.hist( data[..., i].ravel(), - bins=bins, + bins=bins.tolist(), label=c, histtype="step", color=_COLORS[c], ) else: - self.axes.hist(data.ravel(), bins=bins, label=layer.name) + self.axes.hist(data.ravel(), bins=bins.tolist(), label=layer.name) self._contrast_lines = [ self.axes.axvline(lim, color="white") diff --git a/src/napari_matplotlib/tests/baseline/test_histogram_2D.png b/src/napari_matplotlib/tests/baseline/test_histogram_2D.png index 856d22d..00023ae 100644 Binary files a/src/napari_matplotlib/tests/baseline/test_histogram_2D.png and b/src/napari_matplotlib/tests/baseline/test_histogram_2D.png differ diff --git a/src/napari_matplotlib/tests/baseline/test_histogram_3D.png b/src/napari_matplotlib/tests/baseline/test_histogram_3D.png index b5670bc..bd3cafb 100644 Binary files a/src/napari_matplotlib/tests/baseline/test_histogram_3D.png and b/src/napari_matplotlib/tests/baseline/test_histogram_3D.png differ