From 57f1b1411f93e60bd57e06ce0f213e24bf9f16da Mon Sep 17 00:00:00 2001 From: Casey Brooks Date: Thu, 25 Dec 2025 11:58:18 +0000 Subject: [PATCH] fix(offsetbox): propagate annotationbbox gid --- lib/matplotlib/offsetbox.py | 2 ++ lib/matplotlib/tests/test_backend_svg.py | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/lib/matplotlib/offsetbox.py b/lib/matplotlib/offsetbox.py index efa34dd078ee..b42569a5bcca 100644 --- a/lib/matplotlib/offsetbox.py +++ b/lib/matplotlib/offsetbox.py @@ -1452,6 +1452,7 @@ def draw(self, renderer): self._renderer = renderer if not self.get_visible() or not self._check_xy(renderer): return + renderer.open_group('annotationbbox', gid=self.get_gid()) self.update_positions(renderer) if self.arrow_patch is not None: if self.arrow_patch.figure is None and self.figure is not None: @@ -1459,6 +1460,7 @@ def draw(self, renderer): self.arrow_patch.draw(renderer) self.patch.draw(renderer) self.offsetbox.draw(renderer) + renderer.close_group('annotationbbox') self.stale = False diff --git a/lib/matplotlib/tests/test_backend_svg.py b/lib/matplotlib/tests/test_backend_svg.py index 78383904c4fd..083c54bdf884 100644 --- a/lib/matplotlib/tests/test_backend_svg.py +++ b/lib/matplotlib/tests/test_backend_svg.py @@ -550,6 +550,25 @@ def test_svg_escape(): assert '<'"&>"' in buf +def test_annotationbbox_gid_svg(): + fig, ax = plt.subplots() + text_box = mpl.offsetbox.TextArea("Annotation") + ab = mpl.offsetbox.AnnotationBbox(text_box, (0.5, 0.5)) + ab.set_gid("ab_gid_test") + ax.add_artist(ab) + + with BytesIO() as fd: + fig.savefig(fd, format='svg') + svg_bytes = fd.getvalue() + + tree = xml.etree.ElementTree.fromstring(svg_bytes) + ns = "http://www.w3.org/2000/svg" + group = tree.find(f'.//{{{ns}}}g[@id="ab_gid_test"]') + + assert group is not None + assert list(group), "AnnotationBbox group should contain drawn elements" + + @pytest.mark.parametrize("font_str", [ "'DejaVu Sans', 'WenQuanYi Zen Hei', 'Arial', sans-serif", "'DejaVu Serif', 'WenQuanYi Zen Hei', 'Times New Roman', serif",