Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 3d570ba

Browse files
committed
ENH: add aria-label to svg output if available
1 parent 3ee25a0 commit 3d570ba

File tree

2 files changed

+26
-3
lines changed

2 files changed

+26
-3
lines changed

lib/matplotlib/backends/backend_svg.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ def _check_is_iterable_of_str(infos, key):
317317

318318
class RendererSVG(RendererBase):
319319
def __init__(self, width, height, svgwriter, basename=None, image_dpi=72,
320-
*, metadata=None):
320+
*, metadata=None, aria=None):
321321
self.width = width
322322
self.height = height
323323
self.writer = XMLWriter(svgwriter)
@@ -337,6 +337,7 @@ def __init__(self, width, height, svgwriter, basename=None, image_dpi=72,
337337
self._hatchd = {}
338338
self._has_gouraud = False
339339
self._n_gradients = 0
340+
self._aria = dict(aria or {})
340341

341342
super().__init__()
342343
self._glyph_map = dict()
@@ -350,7 +351,9 @@ def __init__(self, width, height, svgwriter, basename=None, image_dpi=72,
350351
viewBox='0 0 %s %s' % (str_width, str_height),
351352
xmlns="http://www.w3.org/2000/svg",
352353
version="1.1",
353-
attrib={'xmlns:xlink': "http://www.w3.org/1999/xlink"})
354+
attrib={'xmlns:xlink': "http://www.w3.org/1999/xlink"},
355+
**{k: self._aria[k] for k in ['aria-label'] if k in self._aria}
356+
)
354357
self._write_metadata(metadata)
355358
self._write_default_style()
356359

@@ -1373,9 +1376,12 @@ def print_svg(self, filename, *, bbox_inches_restore=None, metadata=None):
13731376
self.figure.dpi = 72
13741377
width, height = self.figure.get_size_inches()
13751378
w, h = width * 72, height * 72
1379+
aria = self.figure.get_aria()
13761380
renderer = MixedModeRenderer(
13771381
self.figure, width, height, dpi,
1378-
RendererSVG(w, h, fh, image_dpi=dpi, metadata=metadata),
1382+
RendererSVG(
1383+
w, h, fh, image_dpi=dpi, metadata=metadata, aria=aria
1384+
),
13791385
bbox_inches_restore=bbox_inches_restore)
13801386
self.figure.draw(renderer)
13811387
renderer.finalize()

lib/matplotlib/tests/test_backend_svg.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -609,3 +609,20 @@ def test_svg_font_string(font_str, include_generic):
609609

610610
assert font_info == f"{size}px {font_str}"
611611
assert text_count == len(ax.texts)
612+
613+
614+
def test_aria():
615+
fig, ax = plt.subplots()
616+
617+
with BytesIO() as fd:
618+
fig.savefig(fd, format="svg")
619+
buf = fd.getvalue()
620+
621+
assert b'aria-label' not in buf
622+
623+
fig.set_aria({'aria-label': 'A test of inserting the label'})
624+
with BytesIO() as fd:
625+
fig.savefig(fd, format="svg")
626+
buf = fd.getvalue()
627+
628+
assert b'aria-label' in buf

0 commit comments

Comments
 (0)