Aus Linux-Magazin 08/2003

Messdatenvisualisierung mit Gnuplot

Immer wieder ist es erforderlich, Daten schnell und effektiv in Diagrammen darzustellen. Das in diesem Artikel vorgestellte Programm Gnuplot leistet dabei schon seit vielen Jahren gute Dienste, fristet aber dennoch ein unverdientes Schattendasein.

Messdatenvisualisierung klingt zunächst sehr speziell, aber nach kurzer Überlegung finden sich zahllose praktische Anwendungsbeispiele, sei es die Überwachung der Raumtemperatur, die Auswertung von Logfiles oder Darstellung von Börsenkursen. Mit Gnuplot steht dazu seit über zehn Jahren ein Werkzeug zur Verfügung, dessen Kommandozeilen-Interface zwar spartanisch anmutet, aber in Kombination mit Shellskripten und anderen Tools ungeahnte Flexibilität entfaltet.

Für Freunde der Bequemlichkeit gibt es zudem einige grafische Frontends. Dazu gehören Kile[3], ein Latex-Editor mit integriertem Gnuplot-Frontend, und Unignuplot[4]. Hier soll aber die Kommandozeile im Vordergrund stehen, die eine systemunabhängige und automatisierte Verarbeitung von Daten ermöglicht. Gnuplot erlaubt dabei Visualisierungen im zwei- oder dreidimenisionalen Raum und geht auch bei extrem großen Datenmengen nicht in die Knie.

Listing 1:
Plot-Datei für Monatstemperaturen

01 set xrange [-150:3800]
02 set xtics ("1980" 0, "1981" 365, "1982" 365*2, "1983" 365*3,
03 "1984" 365*4, "1985" 365*5, "1986" 365*6, "1987" 365*7, "1988" 365*8,
04 "1989" 365*9, "1990" 365*10)
05 set title "Monatstemperaturen [¡C] der Jahre 1981 - 1990"
06 set xlabel "Jahre"
07 set ylabel "Temp. [¡C]"
08 set grid
09 plot 'tempmin.dat' title "min.Temp." with lines,
10 'tempmax.dat' title "max.Temp." with lines

Die Kommandozeile

Das Programm hat übrigens nichts mit dem GNU-Projekt der Free Software Foundation zu tun, es handelt sich um eine zufällige Namensgleichheit. Gnuplot ist nicht einmal freie Software oder Open Source im Sinne der Open-Source- Initiative. Es darf zwar modifiziert werden, jedoch ist die Veröffentlichung modifizierter Versionen lediglich in Form von Patches erlaubt.

Nach dem Programmstart durch Eingabe von »gnuplot« bietet sich dem Anwender ein Prompt. Hier werden Gnuplot-spezifische Befehle eingegeben, zum Beispiel »plot cos(x)« zur Darstellung der Kosinusfunktion. Gnuplot öffnet dazu ein separates Fenster und zeichnet darin den Graphen.

Einfache Datensätze

Für die darzustellenden Daten kann es die unterschiedlichsten Quellen geben. Sie können von Messgeräten zur Erfassung physikalischer Größen kommen (etwa Temperatur, Luftdruck, Luftfeuchtigkeit) oder beispielsweise aus dem Internet (etwa Börsendaten). Außerdem ist es möglich, sich virtuelle Messdaten zu schaffen.

Welcher Weg auch immer beschritten wird, die Messdaten liegen grundsätzlich als Messdatensatz vor. Wie im vorigen Absatz erwähnt, erzeugt der Befehl »plot« eine Ausgabe. In diesem einfachen Beispiel wurde dem »plot«-Befehl lediglich eine mathematische Funktion übergeben. Um Messdaten aus einer Datei zu verarbeiten, übergibt man »plot« den Dateinamen als Argument. Das Dateiformat ist dabei extrem simpel: Gnuplot verarbeitet Dateien zeilenweise. Eine Zeile repräsentiert einen Datensatz, der wiederum aus mehreren Spalten bestehen kann. Die Spalten werden durch Tabulatoren oder Leerzeichen voneinander getrennt.

Wenn der Datensatz in der Datei »bsp .dat« als einfache Zahlenkolonne (ein Wert pro Zeile) vorliegt, erfolgt die Darstellung mit Hilfe des Befehls »plot \’bsp.dat\’«. Um Messdaten anders darzustellen, gibt es folgende »style«-Attribute des »plot«-Befehls: »lines«, »points«, »linespoints«, »dots«, »impulses«, »steps«, »fsteps«, »histeps«, »boxes«, »errorbars«, »xerrorbars«, »yerrorbars«, »xyerrorbars«, »boxerrorbars«, »boxxyerrorbars«, »vector«, »financebars«, »candlesticks« (unterschiedliche Darstellungsformen zeigt Abbildung 1). Die Syntax lautet immer: »plot \’ Datei\’ with Style«

Meist ist es nicht erwünscht, sämtliche Spalten des Datensatzes darzustellen, sondern nur ausgewählte. Beispielsweise kann durch »plot \’bsp.dat\’ using 2:3« die zweite und dritte Spalte ausgegeben werden. Im Folgenden soll eine ansprechende Grafik der Monatstemperaturen in Melbourne (Australien) der Jahre 1981 bis 1990 erstellt werden.

Abbildung 1: Hier sind drei unterschiedliche Ausgaben zu sehen, die mit Hilfe des Plot-Befehls (»with points«, »with lines«, »with impulses«) erstellt wurden.

Abbildung 1: Hier sind drei unterschiedliche Ausgaben zu sehen, die mit Hilfe des Plot-Befehls (»with points«, »with lines«, »with impulses«) erstellt wurden.

Beispiel Klimadaten

Die Daten lieferte eine Wetterstation. Sie liegen in den Dateien »tempmin.dat« und »tempmax.dat« (minimale beziehungsweise maximale Monatstemperaturen) vor. Es handelt sich um einspaltige Dateien mit den jeweiligen Temperaturen. Bei komplizierten Grafikdarstellungen ist es nicht sehr effektiv, alle Befehle der Reihe nach einzugeben. Deshalb besteht die Möglichkeit, sich eine Plot-Datei zu erstellen. Diese Datei »temp.plt« soll sämtliche Befehle, die für das Beispiel notwendig sind, enthalten. Dazu gibt man sie einfach in einem Texteditor ein.

Gnuplot erlaubt es auch, alle am Prompt eingegebenen Befehle automatisch in eine Plot-Datei zu schreiben. Das erledigt der Befehl »save OptionDateiname«. » Option« ist entweder »functions«, »variables« oder »set«. Sind keine Optionen angegeben, werden die aktuellen Sets, Funktionen, Variablen und der letzte »plot«- beziehungsweise »splot«-Befehl gespeichert. »load ” Dateiname“« lädt die Datei wieder.

Eine besondere Funktion hat die Datei »~/.gnuplot«. Sie wird, sofern überhaupt vorhanden, beim Start von Gnuplot eingelesen. In ihr kann man die Grundeinstellungen speichern, die bei jedem Start des Programms zu laden sind. Gnuplot liefert eine solche Datei allerdings nicht mit, sodass man sie sich selber erstellen muss. Am besten geht das mit »save Option /home/ BENUTZER/.gnuplot«.

Abbildung 2: Minimale und maximale Monatstemperaturen in Melbourne.

Abbildung 2: Minimale und maximale Monatstemperaturen in Melbourne.

Spezielle
Funktionen

  • Manchmal ist es wünschenswert, konkrete Bezeichnungen
    für eine Zeitachse zu bekommen. Dazu dienen folgende Befehle:
    »set xmtics« wandelt Zahlen in Monatsbezeichnungen um
    (1=Jan, 2=Feb …), »set xdtics« in Bezeichnungen der
    Wochentage (0=Sunday, 6=Saturday). Natürlich kann statt des x
    auch ein y für die y-Achse gesetzt werden. Nicht definierte
    Werte werden angepasst, zum Beispiel 13=Jan.
  • Das Ausschalten der Achsen erledigen folgende Befehle:
    »set xzeroaxis«, »set yzeroaxis«,
    »set zzeroaxis«
  • Mit »set logscale Achse Basis« werden die
    Achsen logarithmisch eingeteilt.

Mehrere Datensätze

Im Beispiel sind mehrere Datensätze in einem Diagramm darzustellen. Das geschieht folgendermaßen: »plot \’tempmax.dat\’ title \’max. Temp.\’ with lines, \’tempmin.dat\’ title \’min. Temp.\’ with lines«. Die Beschriftungen im Diagramm werden mit »set«-Befehlen gesetzt. Zum Setzen des Diagrammtitels dient »set title ” Titel“«, die x-Achse beschriftet »set xlabel ” X-Titel“«, die y-Achse entsprechend »ylabel«.

Die Anweisung »set key x, y« positioniert die Legende an der Position x:y, »set nokey« blendet sie aus. Der Befehl »set xtics« ermöglicht eine individuelle Beschriftung der x-Achse. »set grid« blendet ein Hilfsgitter ein. Den Plot-Bereich erweitert oder begrenzt folgender Befehl: »set xrange [xmin:xmax]«. Beispiele liefert Listing 1. Eine Beispielausgabe ist in Abbildung 2 zu sehen.

Listing 2:
Plot-Datei für Fehlerbalken

01 set title "Durchschnittliches Einkommen (fiktiv)"
02 set xlabel "Dienstjahre"
03 set ylabel "Einkommen [Euro]"
04 set xrange [-1.5:48]
05 plot 'einkommen.dat' title "Einkommen" with boxes,
06      'einkommen.dat' title "Abweichungen" with errorbars

Listing 3: Auszug
aus »3dpunkte.dat«

01 -31 -194 -661
02 58 149 -605
03 -2 188 -599
04 ...

Fehlerbalken

Oft ist es erwünscht, Messdaten mit den zugehörigen Messfehlern oder Abweichungen neben den eigentlichen Messdaten darzustellen. Dazu gibt es in Gnuplot den Befehl »with errorbars«. Dabei müssen entsprechende Anfangs- und Endpunkte der Fehlerbalken als eigene Spalten im Datensatz vorhanden sein. Ist nur eine Spalte für die Definition der Fehlerbalken vorhanden oder wird mit »using 1:2:3« die Verwendung der Spalten limitiert, entnimmt Gnuplot das Ausmaß des Fehlerbalkens der dritten Spalte. Der Wert wird dann als Differenz zum Funktionswert interpretiert (Funktionswert +/- Abweichung).

Wenn der Anwender die Fehlerbalken mit der Ausgabe »with boxes« kombiniert, erfolgt die Darstellung der eigentlichen Messwerte in Balkenform und jene der Abweichungen in Impulsform. Die gesamte Plot-Datei für das gegebene Beispiel zeigt Listing 2.

Zur Darstellung von Daten im dreidimensionalen Raum dient der Befehl »splot«. Im folgenden Beispiel geht es um die 3D-Visualisierung einer Menge von Messdaten. Die Koordinaten der Punkte liegen in der Datei »3dpunkte .dat« in folgender Form vor: »X Y Z« (siehe Listing 3).

Listing 4:
Plot-Datei für das Beispiel 3D-Plot

01 set title "3D-Darstellung von Punktkoordinaten"
02 set data style lines
03 set contour base
04 set surface
05 set hidden3d
06 set view 50,10,1.0,1.0
07 01 set dgrid3d 40,51,3
08 show contour
09 splot '3dpunkte.dat' title "Netzgitter"

Listing 5:
Postscript-Ausgabe

01 set terminal postscript color
02 set output 'dateiname.ps'
03 replot

Listing 6:
Encapsulated Postscript-Ausgabe

01 set terminal postscript eps color
02 set output 'dateiname.eps'
03 replot

3D-Befehle

Für die dreidimensionale Darstellung gibt es in Gnuplot einige spezielle Befehle. »set view rot_x, rot_z, scale_x, scale_z« beeinflusst den fiktiven Blickwinkel des Benutzers auf die 3D-Grafik. Zu berücksichtigen sind dabei die möglichen Rotationsintervalle; »rot_x« (die Defaulteinstellung ist 60 Grad) nimmt Werte zwischen 0 und 180 Grad an, »rot_z« (Defaulteinstellung: 30 Grad) kann zwischen 0 und 360 Grad liegen. Für das Beispiel aus Listing 4 gilt: »set view 50, 10, 1.0, 1.0«. Die Anweisung »set hidden3d« blendet verdeckte Liniensegmente aus, um den 3D-Effekt noch zu verstärken.

Soll Gnuplot unregelmäßig verteilte Datenpunkte darstellen, ist es empfehlenswert, zuerst die Lücken in der Datenpunktverteilung durch Interpolation zu schließen. Dazu dient der Befehl »set dgrid3d«. Ihm müssen die Anzahl der gewünschten Intervalle in x- und y-Richtung und ein Gewichtungsfaktor übergeben werden, hier also: »set dgrid3d 40,51,3«. »set ticslevel« (Defaulteinstellung: 0.5) verändert den Anfangspunkt der vertikalen Achse.

Da die meisten Anwender ihre Diagramme in Dokumente einbinden wollen, gibt es den Befehl »set terminal«. »set output ” Dateiname“« erzeugt eine Ausgabedatei (Listings 5 und 6).

Der Funktionsumfang von Gnuplot ist sehr groß, daher sei jedem das umfangreiche Hilfesystem empfohlen. Erklärungen zu allen Befehlen liefert die Eingabe »help Begriff«. Das komplette Hilfesystem wird mit »help« aufgerufen. Weitere Unterlagen über Gnuplot finden sich im Internet unter anderem bei[2],[5] und[6]. Das englischsprachige Handbuch ist unter[1] einzusehen. (mwe)

Infos

[1] Gnuplot-Homepage: [http://www.gnuplot.info]

[2] Gnuplot-Tutorial: [http://www.duke.edu/ hpgavin/gnuplot.html]

[3] Kile-Homepage: [http://perso.club-internet.fr/pascal.brachet/kile]

[4] Unignuplot-Homepage: [http://unicalculus.sourceforge.net/unignuplot/index.html]

[5] Gnuplot-Handbuch: [http://www.tu-chemnitz.de/urz/anwendungen/grafik/gnuplotdoc.html]

[6] Gnuplot-FAQ: [http://www.ucc.ie/gnuplot/gnuplot-faq.html]

Der
Autor

Dipl.-Ing. Alexander Reiterer ist Forschungsmitarbeiter an der Technischen Universität Wien, derzeit schreibt er an seiner Doktorarbeit.

Abbildung 3: Gnuplot kann auch komplexe dreidimensionale Daten visualisieren.

Abbildung 3: Gnuplot kann auch komplexe dreidimensionale Daten visualisieren.

LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben