diff --git a/src/napari_matplotlib/tests/helpers.py b/src/napari_matplotlib/tests/helpers.py
new file mode 100644
index 00000000..15259f54
--- /dev/null
+++ b/src/napari_matplotlib/tests/helpers.py
@@ -0,0 +1,29 @@
+from io import BytesIO
+
+import numpy as np
+import numpy.typing as npt
+import pytest
+from matplotlib.figure import Figure
+
+
+def fig_to_array(fig: Figure) -> npt.NDArray[np.uint8]:
+    """
+    Convert a figure to an RGB array.
+    """
+    with BytesIO() as io_buf:
+        fig.savefig(io_buf, format="raw")
+        io_buf.seek(0)
+        img_arr = np.reshape(
+            np.frombuffer(io_buf.getvalue(), dtype=np.uint8),
+            newshape=(int(fig.bbox.bounds[3]), int(fig.bbox.bounds[2]), -1),
+        )
+    return img_arr
+
+
+def assert_figures_equal(fig1: Figure, fig2: Figure) -> None:
+    np.testing.assert_equal(fig_to_array(fig1), fig_to_array(fig2))
+
+
+def assert_figures_not_equal(fig1: Figure, fig2: Figure) -> None:
+    with pytest.raises(AssertionError, match="Arrays are not equal"):
+        assert_figures_equal(fig1, fig2)
diff --git a/src/napari_matplotlib/tests/test_histogram.py b/src/napari_matplotlib/tests/test_histogram.py
index e397029c..14375887 100644
--- a/src/napari_matplotlib/tests/test_histogram.py
+++ b/src/napari_matplotlib/tests/test_histogram.py
@@ -3,11 +3,14 @@
 import pytest
 
 from napari_matplotlib import HistogramWidget
+from napari_matplotlib.tests.helpers import (
+    assert_figures_equal,
+    assert_figures_not_equal,
+)
 
 
 @pytest.mark.mpl_image_compare
 def test_histogram_2D(make_napari_viewer, astronaut_data):
-    # Smoke test adding a histogram widget
     viewer = make_napari_viewer()
     viewer.add_image(astronaut_data[0], **astronaut_data[1])
     fig = HistogramWidget(viewer).figure
@@ -18,10 +21,32 @@ def test_histogram_2D(make_napari_viewer, astronaut_data):
 
 @pytest.mark.mpl_image_compare
 def test_histogram_3D(make_napari_viewer, brain_data):
-    # Smoke test adding a histogram widget
     viewer = make_napari_viewer()
     viewer.add_image(brain_data[0], **brain_data[1])
     fig = HistogramWidget(viewer).figure
     # Need to return a copy, as original figure is too eagerley garbage
     # collected by the widget
     return deepcopy(fig)
+
+
+def test_change_layer(make_napari_viewer, brain_data, astronaut_data):
+    viewer = make_napari_viewer()
+    widget = HistogramWidget(viewer)
+
+    viewer.add_image(brain_data[0], **brain_data[1])
+    viewer.add_image(astronaut_data[0], **astronaut_data[1])
+
+    # Select first layer
+    viewer.layers.selection.clear()
+    viewer.layers.selection.add(viewer.layers[0])
+    fig1 = deepcopy(widget.figure)
+
+    # Re-selecting first layer should produce identical plot
+    viewer.layers.selection.clear()
+    viewer.layers.selection.add(viewer.layers[0])
+    assert_figures_equal(widget.figure, fig1)
+
+    # Plotting the second layer should produce a different plot
+    viewer.layers.selection.clear()
+    viewer.layers.selection.add(viewer.layers[1])
+    assert_figures_not_equal(widget.figure, fig1)