From 4632fac5cb7e9cd37c08f4fc2d4e105dd0b3309c Mon Sep 17 00:00:00 2001 From: Oscar Gustafsson Date: Sat, 4 Jun 2022 00:36:10 +0200 Subject: [PATCH] Do not set clip path if it exists --- lib/matplotlib/axes/_axes.py | 5 ++- lib/matplotlib/axes/_base.py | 6 ++- lib/matplotlib/figure.py | 2 +- lib/matplotlib/patheffects.py | 2 +- .../test_axes/preset_clip_paths.png | Bin 0 -> 34650 bytes lib/matplotlib/tests/test_axes.py | 39 +++++++++++++++++- 6 files changed, 47 insertions(+), 7 deletions(-) create mode 100644 lib/matplotlib/tests/baseline_images/test_axes/preset_clip_paths.png diff --git a/lib/matplotlib/axes/_axes.py b/lib/matplotlib/axes/_axes.py index 5354d8fd79f2..770da8142ea8 100644 --- a/lib/matplotlib/axes/_axes.py +++ b/lib/matplotlib/axes/_axes.py @@ -687,7 +687,8 @@ def text(self, x, y, s, fontdict=None, **kwargs): **kwargs, } t = mtext.Text(x, y, text=s, **effective_kwargs) - t.set_clip_path(self.patch) + if t.get_clip_path() is None: + t.set_clip_path(self.patch) self._add_text(t) return t @@ -700,7 +701,7 @@ def annotate(self, text, xy, xytext=None, xycoords='data', textcoords=None, textcoords=textcoords, arrowprops=arrowprops, annotation_clip=annotation_clip, **kwargs) a.set_transform(mtransforms.IdentityTransform()) - if 'clip_on' in kwargs: + if kwargs.get('clip_on', False) and a.get_clip_path() is None: a.set_clip_path(self.patch) self._add_text(a) return a diff --git a/lib/matplotlib/axes/_base.py b/lib/matplotlib/axes/_base.py index 7893d7434f0d..189b15634c2c 100644 --- a/lib/matplotlib/axes/_base.py +++ b/lib/matplotlib/axes/_base.py @@ -2218,7 +2218,8 @@ def add_artist(self, a): self._children.append(a) a._remove_method = self._children.remove self._set_artist_props(a) - a.set_clip_path(self.patch) + if a.get_clip_path() is None: + a.set_clip_path(self.patch) self.stale = True return a @@ -2426,7 +2427,8 @@ def add_table(self, tab): _api.check_isinstance(mtable.Table, tab=tab) self._set_artist_props(tab) self._children.append(tab) - tab.set_clip_path(self.patch) + if tab.get_clip_path() is None: + tab.set_clip_path(self.patch) tab._remove_method = self._children.remove return tab diff --git a/lib/matplotlib/figure.py b/lib/matplotlib/figure.py index 04b1f5dfa727..8f2e2566577e 100644 --- a/lib/matplotlib/figure.py +++ b/lib/matplotlib/figure.py @@ -508,7 +508,7 @@ def add_artist(self, artist, clip=False): if not artist.is_transform_set(): artist.set_transform(self.transSubfigure) - if clip: + if clip and artist.get_clip_path() is None: artist.set_clip_path(self.patch) self.stale = True diff --git a/lib/matplotlib/patheffects.py b/lib/matplotlib/patheffects.py index a2014aa52df0..b0b8aea74d43 100644 --- a/lib/matplotlib/patheffects.py +++ b/lib/matplotlib/patheffects.py @@ -368,7 +368,7 @@ def draw_path(self, renderer, gc, tpath, affine, rgbFace): self.patch.set_transform(affine + self._offset_transform(renderer)) self.patch.set_clip_box(gc.get_clip_rectangle()) clip_path = gc.get_clip_path() - if clip_path: + if clip_path and self.patch.get_clip_path() is None: self.patch.set_clip_path(*clip_path) self.patch.draw(renderer) diff --git a/lib/matplotlib/tests/baseline_images/test_axes/preset_clip_paths.png b/lib/matplotlib/tests/baseline_images/test_axes/preset_clip_paths.png new file mode 100644 index 0000000000000000000000000000000000000000..0b60b60f4849a91b43f1763e2378738528d6d4df GIT binary patch literal 34650 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 G4E;Z;Ky|nP literal 0 HcmV?d00001 diff --git a/lib/matplotlib/tests/test_axes.py b/lib/matplotlib/tests/test_axes.py index c8e1f53465f2..ee3af7382e50 100644 --- a/lib/matplotlib/tests/test_axes.py +++ b/lib/matplotlib/tests/test_axes.py @@ -18,7 +18,7 @@ import matplotlib import matplotlib as mpl -from matplotlib import rc_context +from matplotlib import rc_context, patheffects from matplotlib._api import MatplotlibDeprecationWarning import matplotlib.colors as mcolors import matplotlib.dates as mdates @@ -8455,6 +8455,43 @@ def test_zorder_and_explicit_rasterization(): fig.savefig(b, format='pdf') +@image_comparison(["preset_clip_paths.png"], remove_text=True, style="mpl20") +def test_preset_clip_paths(): + fig, ax = plt.subplots() + + poly = mpl.patches.Polygon( + [[1, 0], [0, 1], [-1, 0], [0, -1]], facecolor="#ddffdd", + edgecolor="#00ff00", linewidth=2, alpha=0.5) + + ax.add_patch(poly) + + line = mpl.lines.Line2D((-1, 1), (0.5, 0.5), clip_on=True, clip_path=poly) + line.set_path_effects([patheffects.withTickedStroke()]) + ax.add_artist(line) + + line = mpl.lines.Line2D((-1, 1), (-0.5, -0.5), color='r', clip_on=True, + clip_path=poly) + ax.add_artist(line) + + poly2 = mpl.patches.Polygon( + [[-1, 1], [0, 1], [0, -0.25]], facecolor="#beefc0", alpha=0.3, + edgecolor="#faded0", linewidth=2, clip_on=True, clip_path=poly) + ax.add_artist(poly2) + + # When text clipping works, the "Annotation" text should be clipped + ax.annotate('Annotation', (-0.75, -0.75), xytext=(0.1, 0.75), + arrowprops={'color': 'k'}, clip_on=True, clip_path=poly) + + poly3 = mpl.patches.Polygon( + [[0, 0], [0, 0.5], [0.5, 0.5], [0.5, 0]], facecolor="g", edgecolor="y", + linewidth=2, alpha=0.3, clip_on=True, clip_path=poly) + + fig.add_artist(poly3, clip=True) + + ax.set_xlim(-1, 1) + ax.set_ylim(-1, 1) + + @mpl.style.context('default') def test_rc_axes_label_formatting(): mpl.rcParams['axes.labelcolor'] = 'red'