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