Datenvisualisierung
===================
Berücksichtigt sehbehinderte Personen bei der Einbeziehung von
Datenvisualisierungen. Datentabellen können dabei eine Alternative zu den
Datenvisualisierungen für Screen-Reader sein. Berücksichtigt auch die
Farbauswahl für farbenblinde Personen. Weitere Emfpehlungen sind:
* ❌ Verlasst euch nicht auf Farben um die Daten zu erklären
* ❌ Verwendet keine kontrastarmen Farben
* ❌ Versteckt keine wichtigen Daten hinter Interaktionen
* ❌ Überfordert euer Publikum nicht mit zu vielen Informationen
* ❌ Verlasst euch nicht auf ``hover``-Effekte; diese funktionieren nicht auf
Mobilgeräten
* ❌ Verzichtet auf Animationen und Scroll-Hijacking, wenn diese nicht
wesentlich zur Erklärung der Daten beitragen
* ✅ Beachtet bereits beim Design die Zugänglichkeit
* ✅ Beachtet auch kleinere Displays, :abbr:`z.B. (zum Beispiel)` bei
Mobilgeräten
* ✅ Verwendet kontrastreiche Farben und Muster
* ✅ Verwendet Etiketten und Legenden
* ✅ Übersetzt die Daten in eine klare Sprache
* ✅ Gebt Kontext an und erklärt die Visualisierung
.. seealso::
* `Case Study: Implementing Accessible Data Charts for the Khan Academy 2018
Annual Report
`_
* `Accessibility Considerations In Data Visualization Design
`_
* `Dataviz Accessibility Resources
`_
* `Writing Alt Text for Data Visualization
`_
* `WAI tutorials: Complex Images
`_
* `Using VoiceOver to Evaluate Web Accessibility
`_
* `How Does This Data Sound? keyboard interaction, sonification etc.
`_
* Heather Migliorisi: `Accessible SVGs
`_
* `Accessible SVG line graphs `_
* `Accessible SVG flowcharts `_
* Carie Fisher: `Creating Accessible SVGs
`_
* Sarah Higley: `Quick Tips for High Contrast Mode
`_
* Melanie Richards: `CurrentColor SVG in forced colors modes
`_
* Val Head: `Designing With Reduced Motion For Motion Sensitivities
`_
D3.js
-----
`D3.js `_ ist eine Javascript-Bibliothek zur
Datenvisualisierung. Um Datenvisualisierungen zugänglicher zu machen, haben wir
ein paar Tipps zusammengestellt:
#. Um die Farben zu erläutern, könnt ihr eine Legende hinzufügen, :abbr:`z.B.
(zum Beispiel)` mit:
.. code-block:: javascript
const legend = chart.append("g").attr("aria-label", "Legend");
Alternativ kann auch ein Titel hinzugefügt werden:
.. code-block:: javascript
const legend = chart.append("g");
legend.append("text")
.text("Legend")
.attr("class", "legendTitle");
#. Nun können wir die Erläuterungen hinzufügen, :abbr:`z.B.
(zum Beispiel)`:
.. code-block:: javascript
legend.append("rect")
.attr("fill", function(d){return hot(d) });
legend.append("text")
.text(">30 °C");
#. Erläutern der Daten, :abbr:`z.B. (zum Beispiel)` für ein Balkendiagramm:
.. code-block:: javascript
chart.selectAll(".label")
.data(data)
.enter().append("text")
.text(row => row.year);
#. Optisch sind die Daten jetzt schon sehr viel zugänglicher, aber mit
Bedienhilfen werden nun auch die Tage auf der x-Achse erschlossen,
und würden :abbr:`z.B. (zum Beispiel)` alle vorgelesen werden. Die
Zugänglichkeit würde deutlich erhöht werden, wenn die Ausgabe so etwas
liefern würde wie *Die durchschnittliche Jahrestemperatur betrug 2011 9,6
Grad Celsius*.
Hierfür sollten dann nicht zunächst die Daten durchlaufen werden und
anschließend die Achsenbeschriftungen sondern jedes Datum mit der zugehörigen
Erläuterung:
.. code-block:: javascript
const ticks = chart.selectAll(".tick")
.data(data)
.enter().append("g")
.attr("class", "tick");
ticks.append("text")
.text((data) => data.year);
ticks.append("text")
.text(row => row.temperature)
.attr("class", "label");
Dies gibt folgendes XML aus:
.. code-block:: xml
2011
9,6 °C
…
#. Bei vielen Achswerten sollten :abbr:`evtl. (eventuell)` nicht alle Werte auf
der Achse angezeigt werden. ``display: none;`` oder ``visibility: hidden``
sind jedoch keine Lösung, da die Werte dann :abbr:`z.B. (zum Beispiel)` auch
nicht vorgelesen würden. Wir können jedoch die Positionierung der
Achsenbeschriftungen so verändern, dass sie außerhalb des sichtbaren Rahmens
stehen.
.. seealso::
* `Accessibility in d3 Bar Charts
`_
* `Accessibility in d3 Donut Charts
`_
Vega
----
`Vega `_ ist
eine deklarative Sprache zum Erstellen, Speichern und Teilen interaktiver
Visualisierungsdesigns. Ab Version 5.11 unterstützt sie einige ARIA-Attribute
für die Ausgabe von SVG-Dateien:
``aria``
schließt ARIA-Attribute in SVG-Dateien ein. Der Standardwert ist ``true``.
Bei ``false`` wird das ``aria-hidden``-Attribut für die entsprechende
SVG-Gruppe gesetzt.
``description``
liefert in ``aria-label`` eine Textbeschreibung des SVG-ELements, wenn
``aria`` den Wert ``true`` hat.
.. seealso::
* `Vega Marks: Accessibility Properties
`_
Mit `Flight Passengers Example
`_ gibt es ein Beispiel
für die Verwendung der Vega-Anweisungen ``aria``- und ``description`` durch
`Vega-Lite `_:
.. image:: flight-passengers.svg
* Die horizontalen Linien sollen nicht zugänglich werden. Daher wurde in der
Vega-Konfigurationsdatei :download:`flight-passengers.vg.json` die
horizontale Linie mit ``"aria": false,`` ausgezeichnet.
.. literalinclude:: flight-passengers.vg.json
:language: javascript
:lines: 108-122
:lineno-start: 108
:emphasize-lines: 4
In der generierten SVG-Datei :download:`flight-passengers.svg`
erhält die zugehörige Gruppe dadurch die Annotation ``aria-hidden="true"``:
.. literalinclude:: flight-passengers.svg
:language: xml
:lines: 69-71
:lineno-start: 69
:emphasize-lines: 1
* Die Markierungen in der Zeitachse erhalten hingegen eine ausführliche
Beschreibung (Englisch ``description``) mit Monat, Jahr und prozentualer
Veränderung zum Vorjahr:
.. literalinclude:: flight-passengers.vg.json
:language: javascript
:lines: 123-140
:lineno-start: 123
:emphasize-lines: 6-8
In der generierten SVG-Datei erhalten die Pfade dadurch ein entsprechendes
``aria-label``:
.. literalinclude:: flight-passengers.svg
:language: xml
:lines: 72-80
:lineno-start: 72
:emphasize-lines: 2-8