HTML5 und Javascript: Daten visualisieren mit Plotly.JS

Mit Plotly lassen sich relativ unkompliziert Daten in allen möglichen Darstellungsarten visualisieren.

 

z.B. Klangdaten einzelner Musikinstrumente:
Glasflöte
, Glastrompete, Glasplattenklavier, Glasharmonika (Pedal), Glasharmonika (Motor), Verrophon

Timbre Features: Formanten, Spectral Centroids, dynamische Klangfarbenfelder

Registergrenzen: Flöte, Oboe, Klarinette, Fagott

Messwerte an Inkubatoren: Innerhalb und außerhalb des Inkubators, Pegel in dB(A), Pegel in dB(SPL)

u.v.a.m.: Raumakustische Daten , Glockenklänge , Taubengurren, HipHop: Produzenten vs, Interpreten , Klangfarbe-Farbe-Synästhesie

Im Vergleich zu anderen Daten-Visualisierungs-Libraries ist Plotly die mit Abstand vielseitigste Library mit einer großen Community.

Sobald man sich die aktuelle Plotly-Library unter
https://cdn.plot.ly/plotly-latest.min.js
heruntergeladen hat, kann man direkt loslegen:

Zunächst legt man die heruntergeladene Datei (plotly-latest.min.js) in einen Ordner (z.B. mit dem Namen "header"), in dem sich auch die Datei mit den darzustellenden Daten befinden sollte. Hier wäre dies z.B. die Datei lukeme_array.js , die aus Signalanalysen der Lukeme-Klänge in Excel hervorgegangen ist (lukeme.xls).

 

 

 

Vorbereitung

Um Daten aus einer Excel-Datei in Javascript-Arrays umzuwandeln, die dann in Plotly angezeigt werden sollen, bieten sich ein bzw. zwei Schritte an:

  • 1. (optional): z-Transformation: Wenn in den Daten verschiedene Zahlen-Skalen gleichzeitig verwendet werden (z.B. 0-120 dB und 0-22000 Hz), bietet sich die z-Transformation an, um die Daten als Kurven vergleichen zu können. die z-transformierten Zahlen geben unabhängig von ihrer ursprünglichen Einheit/Skalierung an, wie viele Standardabweichungen ein Wert vom Mittelwert abweicht. Hierdurch werden sie vergleichbar.
    Um die Werte in einer Excel-Datei zu z-Transformieren bietet sich der SInES z-Transformer an: Laden Sie hier Ihre Excel- oder CSV-Datei hoch und nach dem Klick auf "Download *.xlsx File" können Sie das z-transformierte Excel-File herunterladen.

  • 2. Umwandlung in Javascript Arrays: egal ob z-transformiert oder normal: Laden Sie Ihre Excel- oder CSV-Datei in den Excel/CSV to JS Array Converter hoch und klicken Sie auf "Download *.js File" um das konvertierte Javascript mit den zu Plotly passenden Listen (Arrays) herunterzuladen.

 

 

 

Grundlegender Aufbau von Plotly-Visualisierungen

Sobald die Daten in dieser Art vorbereitet sind, kann man beide Dateien über das Script-Tag in eine html-Datei einbinden. Der typische Aufbau einer html-Datei mit der eingebundenen Plotly-Library und den eingebundenen vorbereiteten Daten-Arrays sähe dann folgendermaßen aus:

<html>

<head>
<script src="header/plotly-latest.min.js"></script>
<script src="header/lukeme_array.js"></script>
</head>

<body bgcolor="#FFFFFF" text="#000000">
<!--(hier kommt dann der im Browser sichtbare Inhalt hin) -->
</body>

</html>

 

Zwischen die beiden Body-Tags ( <body bgcolor="#FFFFFF" text="#000000"> und </body> ) kommen dann 5 Abschnitte, die je nach Darstellungsart teilweise anders gefüllt werden:

 

1. Ein durch DIV-Tags festgelegter Bereich mit einem Namen (hier "AnzeigeDiv") mit den Pixelmaßen für die Weite und Höhe der Darstellung (hier style="width:800,height:800"), in dem die Visualisierung angezeigt werden soll.

<div id="AnzeigeDiv" style="width:800,height:800"></div>


2.
Ab hier beginnt ein Script-Teil (zwischen <script> und </script>), in dem alles Weitere geregelt wird. Zunächst werden die Daten und die Art der Darstellung in einzelnen "Traces" zusammengestellt, z.B.

var trace1 = {
x: pitch_array, // X-Achse: Array mit Tonhöhen der Lukeme aus lukeme_array.js
y: attackTime_array, //Y-Achse: Array mit Einschiwingzeiten der Lukeme aus lukeme_array.js
type: 'bar', // Darstellung in Balkengrafiken
name: 'Einschwingzeit', // Bezeichnung der Balken
text: pitch_array, // Namen der Werte: Array mit den Tonhöhennamen aus lukeme_array.js
};

var trace2 = {
x: pitch_array, // X-Achse: Array mit Tonhöhen der Lukeme aus lukeme_array.js
y: releaseTime_array, // Y-Achse: Array mit Ausklingzeiten der Lukeme aus lukeme_array.js
type: 'bar', // Darstellung in Balkengrafiken
name: 'Ausklingzeit', // Bezeichnung der Balken
text: pitch_array, // Namen der Werte: Array mit den Tonhöhennamen aus lukeme_array.js
};

Es können hier beliebig viele Traces angelegt werden, die auch beliebig gestaltet werden können (Farben, Transparenz, Punkte, Linien, Schriftarten etc.)


3.
Alle Traces werden dann in einem Array namens "data" zusammengefasst:

var data = [ trace1, trace2];


4.
Danach wird das Layout bestimmt, z.B.:

var layout = {
showlegend: true, // Legende für die einzelnen Kurven/Punkte an rechter Seite anzeigen
barmode: 'stack', //Balken werden übereinandergestapelt angezeigt
xaxis: {
title: 'Grundtonhöhen', // Titel der X-Achse
},
yaxis: {
title: 'Dauern [sec]', // Titel der Y-Achse
},
legend: { // Gestaltung der Legende
font: { family: 'Verdana, sans-serif', size: 10, color: 'black', }
},
title: 'Einschwing- und Ausklingzeiten der Lukeme', // Gesamttitel
};


5. Schließlich werden mit Plotly.newPlot(); alle Traces (data) und das Layout (layout) zusammengeführt und im oben definierten Bereich (AnzeigeDiv, s.o. unter 1.) zur Darstellung gebracht:

Plotly.newPlot('AnzeigeDiv', data, layout);

Nach diesem Schema laufen so ziemlich alle Darstellungsarten innerhalb von Plotly ab.

 

Für Daten aus der (systematischen) Musikwissenschaft sind folgende Darstellungsarten besonders spannend:

Zweidimensionale Darstellungen:

Drei- und mehrdimensionale Darstellungen: