From f886934de251e293302fa363757806551bb34f1d Mon Sep 17 00:00:00 2001 From: Julien Seguinot <1186928+juseg@users.noreply.github.com> Date: Fri, 10 Oct 2025 16:03:41 +0900 Subject: [PATCH 01/11] Add clip_on to matplotlib.inset._shared_properties. --- lib/matplotlib/inset.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/inset.py b/lib/matplotlib/inset.py index fb5bfacff924..7132a7a0d74a 100644 --- a/lib/matplotlib/inset.py +++ b/lib/matplotlib/inset.py @@ -8,7 +8,8 @@ from matplotlib.path import Path -_shared_properties = ('alpha', 'edgecolor', 'linestyle', 'linewidth') +_shared_properties = ( + 'alpha', 'clip_on', 'edgecolor', 'linestyle', 'linewidth') class InsetIndicator(artist.Artist): From af22db7c738436079e79331fbdc30ef222cfabeb Mon Sep 17 00:00:00 2001 From: Julien Seguinot <1186928+juseg@users.noreply.github.com> Date: Fri, 10 Oct 2025 16:05:43 +0900 Subject: [PATCH 02/11] Add InsetIndicator.set_clip_on(). --- lib/matplotlib/inset.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/matplotlib/inset.py b/lib/matplotlib/inset.py index 7132a7a0d74a..0d741ee01339 100644 --- a/lib/matplotlib/inset.py +++ b/lib/matplotlib/inset.py @@ -91,6 +91,10 @@ def set_alpha(self, alpha): # docstring inherited self._shared_setter('alpha', alpha) + def set_clip_on(self, clip_on): + # docstring inherited + self._shared_setter('clip_on', clip_on) + def set_edgecolor(self, color): """ Set the edge color of the rectangle and the connectors. From 45d96b27b1d41cef5ee19309551966bc5c40ae64 Mon Sep 17 00:00:00 2001 From: Julien Seguinot <1186928+juseg@users.noreply.github.com> Date: Thu, 9 Jul 2026 13:57:51 +0200 Subject: [PATCH 03/11] Update inset indicator stub file. --- lib/matplotlib/inset.pyi | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/matplotlib/inset.pyi b/lib/matplotlib/inset.pyi index e895fd7be27c..144dc8eb7305 100644 --- a/lib/matplotlib/inset.pyi +++ b/lib/matplotlib/inset.pyi @@ -15,6 +15,7 @@ class InsetIndicator(artist.Artist): ) -> None: ... def set_alpha(self, alpha: float | None) -> None: ... def set_edgecolor(self, color: ColorType | None) -> None: ... + def set_clip_on(self, clip_on: bool) -> None: ... def set_color(self, c: ColorType | None) -> None: ... def set_linewidth(self, w: float | None) -> None: ... def set_linestyle(self, ls: LineStyleType | None) -> None: ... From ab944236c66cc5ab3529dd440fa9367cb87820d5 Mon Sep 17 00:00:00 2001 From: Julien Seguinot <1186928+juseg@users.noreply.github.com> Date: Thu, 9 Jul 2026 15:49:55 +0200 Subject: [PATCH 04/11] Test clipping a single connector to axes bbox. --- lib/matplotlib/tests/test_inset.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/matplotlib/tests/test_inset.py b/lib/matplotlib/tests/test_inset.py index bbf481c23253..1c651cc40fe7 100644 --- a/lib/matplotlib/tests/test_inset.py +++ b/lib/matplotlib/tests/test_inset.py @@ -107,6 +107,8 @@ def test_zoom_inset_connector_styles(): # Make one visible connector a different style indicator.connectors[1].set_linestyle('dashed') indicator.connectors[1].set_color('blue') + indicator.connectors[1].set_clip_box(axs[0].bbox) + indicator.connectors[1].set_clip_on(True) @image_comparison(['zoom_inset_transform.png'], remove_text=True, style='mpl20', From 745355c758874eeba2c65d4888fec31dfbab485f Mon Sep 17 00:00:00 2001 From: Julien Seguinot <1186928+juseg@users.noreply.github.com> Date: Thu, 9 Jul 2026 15:56:05 +0200 Subject: [PATCH 05/11] Update the corresponding baseline image. --- .../zoom_inset_connector_styles.png | Bin 18960 -> 18361 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/matplotlib/tests/baseline_images/test_inset/zoom_inset_connector_styles.png b/lib/matplotlib/tests/baseline_images/test_inset/zoom_inset_connector_styles.png index df8b768725d7b6a3d2554ac452f617bf34593923..15a86195005b2a210d87e688e34c2e6c370d46f3 100644 GIT binary patch literal 18361 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 T`3W7cy@<59+=Kl4`p^Flc6rH0 literal 18960 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 Date: Thu, 9 Jul 2026 16:00:26 +0200 Subject: [PATCH 06/11] Test updating rect and connector clipping (fails). --- lib/matplotlib/tests/test_inset.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/matplotlib/tests/test_inset.py b/lib/matplotlib/tests/test_inset.py index 1c651cc40fe7..4c8da078e40d 100644 --- a/lib/matplotlib/tests/test_inset.py +++ b/lib/matplotlib/tests/test_inset.py @@ -46,19 +46,22 @@ def test_inset_indicator_update_styles(): inset, edgecolor='red', alpha=0.5, linewidth=2, linestyle='solid') # Changing the rectangle styles should not affect the connectors. - indicator.rectangle.set(color='blue', linestyle='dashed', linewidth=42, alpha=0.2) + indicator.rectangle.set(clip_on=True, color='blue', linestyle='dashed', linewidth=42, alpha=0.2) for conn in indicator.connectors: assert mcolors.same_color(conn.get_edgecolor()[:3], 'red') assert conn.get_alpha() == 0.5 + assert conn.get_clip_on() is False assert conn.get_linestyle() == 'solid' assert conn.get_linewidth() == 2 # Changing the indicator styles should affect both rectangle and connectors. - indicator.set(color='green', linestyle='dotted', linewidth=7, alpha=0.8) + indicator.rectangle.set(clip_on=False) + indicator.set(clip_on=True, color='green', linestyle='dotted', linewidth=7, alpha=0.8) assert mcolors.same_color(indicator.rectangle.get_facecolor()[:3], 'green') for patch in (*indicator.connectors, indicator.rectangle): assert mcolors.same_color(patch.get_edgecolor()[:3], 'green') assert patch.get_alpha() == 0.8 + assert patch.get_clip_on() is True assert patch.get_linestyle() == 'dotted' assert patch.get_linewidth() == 7 @@ -67,12 +70,14 @@ def test_inset_indicator_update_styles(): assert mcolors.same_color(patch.get_edgecolor()[:3], 'purple') # This should also be true if connectors weren't created yet. + indicator.rectangle.set(clip_on=False) indicator._connectors = [] - indicator.set(color='burlywood', linestyle='dashdot', linewidth=4, alpha=0.4) + indicator.set(clip_on=True, color='burlywood', linestyle='dashdot', linewidth=4, alpha=0.4) assert mcolors.same_color(indicator.rectangle.get_facecolor()[:3], 'burlywood') for patch in (*indicator.connectors, indicator.rectangle): assert mcolors.same_color(patch.get_edgecolor()[:3], 'burlywood') assert patch.get_alpha() == 0.4 + assert patch.get_clip_on() is True assert patch.get_linestyle() == 'dashdot' assert patch.get_linewidth() == 4 From d908f4d98e68c471a9a02c5563534bf5107c300f Mon Sep 17 00:00:00 2001 From: Julien Seguinot <1186928+juseg@users.noreply.github.com> Date: Thu, 9 Jul 2026 16:45:34 +0200 Subject: [PATCH 07/11] Propagate clip_on to new connectors (still fails). --- lib/matplotlib/inset.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/matplotlib/inset.py b/lib/matplotlib/inset.py index 12c42b50d0e6..6898e809ac5e 100644 --- a/lib/matplotlib/inset.py +++ b/lib/matplotlib/inset.py @@ -198,7 +198,7 @@ def _update_connectors(self): p = ConnectionPatch( xyA=xy_inset_ax, coordsA=self._inset_ax.transAxes, xyB=xy_data, coordsB=self.rectangle.get_data_transform(), - arrowstyle="-", + arrowstyle="-", clip_on=self.get_clip_on(), edgecolor=self._edgecolor, alpha=self.get_alpha(), linestyle=self._linestyle, linewidth=self._linewidth) self._connectors.append(p) From 4d2b03025f0f1f5cabdf12c939f9ee3dcdc7d05e Mon Sep 17 00:00:00 2001 From: Julien Seguinot <1186928+juseg@users.noreply.github.com> Date: Thu, 9 Jul 2026 16:53:08 +0200 Subject: [PATCH 08/11] The attribute name is _clipon not _clip_on (pass). --- lib/matplotlib/inset.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/matplotlib/inset.py b/lib/matplotlib/inset.py index 6898e809ac5e..068886bdb544 100644 --- a/lib/matplotlib/inset.py +++ b/lib/matplotlib/inset.py @@ -70,13 +70,13 @@ def __init__(self, bounds=None, inset_ax=None, zorder=None, **kwargs): # Initial style properties for the artist should match the rectangle. for prop in _shared_properties: - setattr(self, f'_{prop}', artist.getp(self._rectangle, prop)) + setattr(self, f'_{prop.replace('_', '')}', artist.getp(self._rectangle, prop)) def _shared_setter(self, prop, val): """ Helper function to set the same style property on the artist and its children. """ - setattr(self, f'_{prop}', val) + setattr(self, f'_{prop.replace('_', '')}', val) artist.setp([self._rectangle, *self._connectors], prop, val) From 0c4db0e78a74af4c00edbfbd7eceb57c07765850 Mon Sep 17 00:00:00 2001 From: Julien Seguinot <1186928+juseg@users.noreply.github.com> Date: Thu, 9 Jul 2026 17:08:01 +0200 Subject: [PATCH 09/11] Address ruff complaints. --- lib/matplotlib/inset.py | 3 ++- lib/matplotlib/tests/test_inset.py | 9 ++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/matplotlib/inset.py b/lib/matplotlib/inset.py index 068886bdb544..6e8d3195e5e1 100644 --- a/lib/matplotlib/inset.py +++ b/lib/matplotlib/inset.py @@ -70,7 +70,8 @@ def __init__(self, bounds=None, inset_ax=None, zorder=None, **kwargs): # Initial style properties for the artist should match the rectangle. for prop in _shared_properties: - setattr(self, f'_{prop.replace('_', '')}', artist.getp(self._rectangle, prop)) + setattr( + self, f'_{prop.replace('_', '')}', artist.getp(self._rectangle, prop)) def _shared_setter(self, prop, val): """ diff --git a/lib/matplotlib/tests/test_inset.py b/lib/matplotlib/tests/test_inset.py index 4c8da078e40d..8fc39d4e6151 100644 --- a/lib/matplotlib/tests/test_inset.py +++ b/lib/matplotlib/tests/test_inset.py @@ -46,7 +46,8 @@ def test_inset_indicator_update_styles(): inset, edgecolor='red', alpha=0.5, linewidth=2, linestyle='solid') # Changing the rectangle styles should not affect the connectors. - indicator.rectangle.set(clip_on=True, color='blue', linestyle='dashed', linewidth=42, alpha=0.2) + indicator.rectangle.set( + clip_on=True, color='blue', linestyle='dashed', linewidth=42, alpha=0.2) for conn in indicator.connectors: assert mcolors.same_color(conn.get_edgecolor()[:3], 'red') assert conn.get_alpha() == 0.5 @@ -56,7 +57,8 @@ def test_inset_indicator_update_styles(): # Changing the indicator styles should affect both rectangle and connectors. indicator.rectangle.set(clip_on=False) - indicator.set(clip_on=True, color='green', linestyle='dotted', linewidth=7, alpha=0.8) + indicator.set( + clip_on=True, color='green', linestyle='dotted', linewidth=7, alpha=0.8) assert mcolors.same_color(indicator.rectangle.get_facecolor()[:3], 'green') for patch in (*indicator.connectors, indicator.rectangle): assert mcolors.same_color(patch.get_edgecolor()[:3], 'green') @@ -72,7 +74,8 @@ def test_inset_indicator_update_styles(): # This should also be true if connectors weren't created yet. indicator.rectangle.set(clip_on=False) indicator._connectors = [] - indicator.set(clip_on=True, color='burlywood', linestyle='dashdot', linewidth=4, alpha=0.4) + indicator.set( + clip_on=True, color='burlywood', linestyle='dashdot', linewidth=4, alpha=0.4) assert mcolors.same_color(indicator.rectangle.get_facecolor()[:3], 'burlywood') for patch in (*indicator.connectors, indicator.rectangle): assert mcolors.same_color(patch.get_edgecolor()[:3], 'burlywood') From c30e74223fd75293e56847c9e65ab797df516abf Mon Sep 17 00:00:00 2001 From: Julien Seguinot <1186928+juseg@users.noreply.github.com> Date: Fri, 10 Jul 2026 11:01:45 +0200 Subject: [PATCH 10/11] Add example of an inset across broken axes. --- .../broken_axis_inset.py | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 galleries/examples/subplots_axes_and_figures/broken_axis_inset.py diff --git a/galleries/examples/subplots_axes_and_figures/broken_axis_inset.py b/galleries/examples/subplots_axes_and_figures/broken_axis_inset.py new file mode 100644 index 000000000000..0797c065a813 --- /dev/null +++ b/galleries/examples/subplots_axes_and_figures/broken_axis_inset.py @@ -0,0 +1,55 @@ +""" +================= +Broken axis inset +================= + +Example of a broken axis with an inset spanning across the break. +""" + +import matplotlib.pyplot as plt + +# initialize figure +fig, axes = plt.subplots(ncols=2, sharey=True, gridspec_kw={'top': 0.6}) +inset = fig.add_axes([0.2, 0.7, 0.6, 0.2]) + +# set axes limits +axes[0].set_xlim(0, 0.5) +axes[1].set_xlim(0.5, 1) +axes[1].set_ylim(0, 1) +inset.set_xlim(0.3, 0.7) +inset.set_ylim(0.4, 0.6) + +# hide the spines between the axes +axes[0].spines.right.set_visible(False) +axes[1].spines.left.set_visible(False) +axes[1].yaxis.tick_right() + +# indicate inset on the left axes +indicator = axes[0].indicate_inset(inset_ax=inset, edgecolor='tab:red') +indicator.rectangle.set_clip_box(axes[0].bbox) +indicator.rectangle.set_clip_on(True) +indicator.connectors[2].set_visible(False) + +# indicate inset on the right axes +indicator = axes[1].indicate_inset(inset_ax=inset, edgecolor='tab:blue') +indicator.rectangle.set_clip_box(axes[1].bbox) +indicator.rectangle.set_clip_on(True) +indicator.connectors[0].set_visible(False) + +# show +plt.show() + +# %% +# +# .. admonition:: References +# +# The use of the following functions, methods, classes and modules is shown +# in this example: +# +# - `matplotlib.axes.Axes.indicate_inset_zoom` +# - `matplotlib.inset.InsetIndicator` +# +# .. tags:: +# +# component: axes +# level: advances From 73261ce089307d987f0c32b8241820dedcfd847a Mon Sep 17 00:00:00 2001 From: Julien Seguinot <1186928+juseg@users.noreply.github.com> Date: Fri, 10 Jul 2026 11:44:27 +0200 Subject: [PATCH 11/11] Add new example to subplots gallery. --- galleries/examples/subplots_axes_and_figures/gallery_order.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/galleries/examples/subplots_axes_and_figures/gallery_order.txt b/galleries/examples/subplots_axes_and_figures/gallery_order.txt index 5ec9bf1a0d00..0da8ca319efd 100644 --- a/galleries/examples/subplots_axes_and_figures/gallery_order.txt +++ b/galleries/examples/subplots_axes_and_figures/gallery_order.txt @@ -44,5 +44,6 @@ figure_title axes_zoom_effect zoom_inset_axes broken_axis +broken_axis_inset geo_demo axhspan_demo