diff --git a/lib/matplotlib/image.py b/lib/matplotlib/image.py index 1608db9f5090..b225766d22d9 100644 --- a/lib/matplotlib/image.py +++ b/lib/matplotlib/image.py @@ -149,7 +149,8 @@ def flush_images(): del image_group[:] for a in artists: - if isinstance(a, _ImageBase) and a.can_composite(): + if (isinstance(a, _ImageBase) and a.can_composite() and + a.get_clip_on()): image_group.append(a) else: flush_images() @@ -886,10 +887,10 @@ def make_image(self, renderer, magnification=1.0, unsampled=False): x1, x2, y1, y2 = self.get_extent() bbox = Bbox(np.array([[x1, y1], [x2, y2]])) transformed_bbox = TransformedBbox(bbox, trans) - return self._make_image( - self._A, bbox, transformed_bbox, - self.get_clip_box() or self.axes.bbox, - magnification, unsampled=unsampled) + clip = ((self.get_clip_box() or self.axes.bbox) if self.get_clip_on() + else self.figure.bbox) + return self._make_image(self._A, bbox, transformed_bbox, clip, + magnification, unsampled=unsampled) def _check_unsampled_image(self): """Return whether the image would be better drawn unsampled.""" diff --git a/lib/matplotlib/tests/baseline_images/test_image/bbox_image_inverted.pdf b/lib/matplotlib/tests/baseline_images/test_image/bbox_image_inverted.pdf index f1cc042d6606..df07fd91a9c6 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_image/bbox_image_inverted.pdf and b/lib/matplotlib/tests/baseline_images/test_image/bbox_image_inverted.pdf differ diff --git a/lib/matplotlib/tests/baseline_images/test_image/bbox_image_inverted.svg b/lib/matplotlib/tests/baseline_images/test_image/bbox_image_inverted.svg index c3942247a542..406a278f2f3f 100644 --- a/lib/matplotlib/tests/baseline_images/test_image/bbox_image_inverted.svg +++ b/lib/matplotlib/tests/baseline_images/test_image/bbox_image_inverted.svg @@ -1,7 +1,7 @@ - + diff --git a/lib/matplotlib/tests/test_image.py b/lib/matplotlib/tests/test_image.py index 18609f1b5069..fea5f8a1ac13 100644 --- a/lib/matplotlib/tests/test_image.py +++ b/lib/matplotlib/tests/test_image.py @@ -1031,6 +1031,18 @@ def test_relim(): assert ax.get_xlim() == ax.get_ylim() == (0, 1) +def test_unclipped(): + fig, ax = plt.subplots() + ax.set_axis_off() + im = ax.imshow([[0, 0], [0, 0]], aspect="auto", extent=(-10, 10, -10, 10), + cmap='gray', clip_on=False) + ax.set(xlim=(0, 1), ylim=(0, 1)) + fig.canvas.draw() + # The unclipped image should fill the *entire* figure and be black. + # Ignore alpha for this comparison. + assert (np.array(fig.canvas.buffer_rgba())[..., :3] == 0).all() + + def test_respects_bbox(): fig, axs = plt.subplots(2) for ax in axs: