Die Plotutils versprechen schnelle Hilfe bei der Visualisierung nummerischer Daten in unterschiedlichsten Ausgabeformaten.
Manchmal sind es die ganz einfachen Dinge, die einem das Leben unnötig schwer machen. Dahinter stecken oft ganz einfache Fragen: Wie lange dauert es noch, bis meine Datenfestplatte vollläuft? Bis wann hält der Akku des Notebooks noch durch? Bis zu welchem Datum komme ich mit dem Geld auf meinem Konto noch aus?
Die Plotutils [1] versammeln eine Gruppe von Programmen, die alle auf die Funktionen der GNU Libplot zugreifen. Diese Library erstellt geräteunabhängige Vektorgrafiken und sogar Animationen in diversen Ausgabeformaten. Bindings gibt es unter anderem für C und C++. Aufgrund der guten Schnittstellenprogramme für die Shell muss man in den meisten Fällen allerdings gar nichts programmieren – es genügt oft, eine gut ausgearbeitete Befehlszeile aufzurufen.
Plotutils installieren
Die Plotutils finden sich in den Repositories aller gängigen Distributionen, sodass Sie sie unkompliziert über den Paketmanager der verwendeten Distribution einrichten. Unter Debian und dessen Derivaten genügt dazu der Aufruf apt-get install plotutils, den Sie mit administrativen Rechten absetzen. Er zieht automatisch alle benötigten Abhängigkeiten nach.
Das gewünschte Ausgabeformat (siehe Tabelle “Plotutils-Ausgabeformate”) wählen Sie beim Aufruf als Argument der Option -T an, also beispielsweise graph -T X ..., wobei die Plotutils mehrfache Angaben von -T akzeptieren. Dann müssen Sie aber für eine geeignete Ausgabeumleitung sorgen:
$ graph -T X -T PNG ... > output.png
Plotutils-Ausgabeformate
| Bezeichner | Format |
|---|---|
AI |
Format von Adobe Illustrator |
FIG |
editierbares Vektorgrafikformat für das Programm Fig |
GIF |
eine vereinfachte Variante von GIF |
Metafile |
GNUs geräteunabhängiges Grafikformat, wird intern verwendet |
PNG |
PNG-Datei, gut für das Weiterverarbeiten geeignet |
PNM |
Portable Anymap, universelles Bitmap-Format |
PS |
Postscript, umwandelbar in PDF |
SVG |
klassisches Vektorgrafikformat |
X |
Ausgabe in einem X-Window, erzeugt keine Ausgabedatei |
Für das Ausgeben der Grafiken stellen die Plotutils mehrere Programme bereit. Das wichtigste davon ist das im obigen Beispiel verwendete Graph. Mit dem Parameter --help lassen Sie sich dessen verfügbare Optionen anzeigen, die überraschenderweise recht übersichtlich ausfallen (Tabelle “Optionen für Graph”).
Optionen für Graph
| Option | Funktion |
|---|---|
-T Ausgabe |
definiert das Ausgabeformat |
-f Größe |
Schriftgröße in Pixel einstellen |
-F Font |
Zeichensatz für Beschriftungen |
-g Stil |
Stil (0 bis 3) für ein Gitter im Hintergrund |
-h Höhe |
Ausgabegröße einstellen |
-k Abstand |
Abstand zwischen Achsenmarken einstellen |
-K Clip |
den Clip-Modus aktivieren |
-r Versatz |
verschiebt den Plot im Ausgabefenster um den angegebenen Wert |
-s |
sichert das Ausgabefenster, zeichnet den neuen Plot über den bereits angezeigten |
-u Versatz |
verschiebt den Plot im Ausgabefenster vertikal |
-w Breite |
relative Breite im Ausgabefenster |
--bitmap-size XxY |
Größe des Ausgabefensters |
--max-line-length Anzahl |
Anzahl der Punkte für die Linien |
--page-size Format |
stellt das Ausgabeformat ein, etwa a4 |
--pen-colors Farbe |
die Linienfarbe |
--rotation Winkel |
dreht die Ausgabe um den angegebenen Winkel |
-E Achse |
Bezeichner für Achse x oder y auf der gegenüberliegenden Seite anzeigen |
-l Achse |
logarithmische Darstellung für die Achse x oder y |
-L Label |
Achsenbeschriftung setzen |
-N Achse |
Achsenmarken abschalten |
-x Skala |
Skalen für die X-Achse definieren |
-y Skala |
Skalen für die Y-Achse definieren |
-X Label |
Beschriftungen für die X-Achse definieren |
-Y Label |
Beschriftungen für die Y-Achse definieren |
Die mit den Plotutils erstellten “Plots” bestehen aus der eigentlichen Kurve, den Achsen mit deren Beschriftungen und eventuell noch zusätzlichen Elementen, wie etwa einem Titel oder einem Gitter im Hintergrund.
Als Eingaben akzeptiert Graph sowohl binäre als auch Klartextdateien. Letztere lassen sich meist wesentlich angenehmer verarbeiten, da man sie leicht erstellen und mit einem beliebigen Editor schnell modifizieren kann. Die genaue Interpretation der eingelesenen Daten können Sie über mehrere Optionen steuern (siehe Tabelle “Mehr Optionen für Graph”).
Beim Zusammenstellen der Kommandozeile gilt es, genauestens auf die Reihenfolge der Optionen und Argumente zu achten. Die Optionen steuern stets die Darstellung der ihnen folgenden Daten. Neben den Befehlszeilenoptionen wertet Graph auch eine Reihe von Umgebungsvariablen aus. Deren Inhalte nutzen die Plotutils-Programme, als hätten Sie sie in Form von Optionen angegeben. Allerdings übersteuern auf der Kommandozeile angegebene Optionen die Werte aus den Umgebungsvariablen.
Mehr Optionen für Graph
| Option | Funktion |
|---|---|
-I Format |
a: ASCII-Daten, e ASCII-Daten mit Fehlerbalken, g Gnuplot-Daten, f binäre Daten mit einfacher Genauigkeit, d binäre Daten mit doppelter Genauigkeit, i Integerdaten |
-a Schrittweite |
erzeugt automatisch X-Werte mit der angegebenen Schrittweite |
-B |
schaltet den Linienmodus um |
-m Modus |
definiert den Linienmodus; 1 für durchgezogene Linien, 2 für gepunktete Linien, 3 für Strichpunkte, 4 für kurze Striche und 5 für lange Striche |
-S Symbol |
definiert Symbole für die Markierung von Linien; 1 für Punkte, 2 für Plus-Zeichen, 3 für Sternchen, 4 für Grad-Symbole und 5 für Mal-Zeichen, 0 unterdrückt die Ausgabe von Symbolen |
-W Stärke |
definiert die Linienstärke in einer relativen Einheit |
-q Dichte |
legt fest, wie die Linien erzeugt werden, füllt geschlossene Bereiche |
-C |
schaltet um, ob das Programm Linien farbig gestaltet |
Zeile für Zeile
Die Eingabedaten liest graph aus einer Eingabedatei oder vom Standardeingabekanal. Dabei erwartet das Programm die Angaben im einfachsten Fall als durch Leerzeichen getrennte X/Y-Paare, die für jeden Messwert genau eine Zeile verwenden.
Listing 1 zeigt ein entsprechendes Beispiel. Beachten Sie auch die dort gezeigte Möglichkeit, Optionen als Kommentare am Anfang der Datei einzubringen. Solche funktionellen Kommentare dürfen auch innerhalb der Daten auftreten und schalten dann die Darstellung für die folgenden Ausgaben um.
Listing 1
#m=5,S=10 1422968301 140736 [...] 11422973527 137436
Alternativ kommt das Programm aber auch mit “am Stück” angegebenen statt zeilenweise gelieferten Werten zurecht, etwa beim Einlesen aus der Standardeingabe. Dies demonstriert folgender Befehl:
$ echo 1 1 2 2 3 1 1 1| graph -TX
Hier fasst Graph immer zwei aufeinanderfolgende Werte zu einem Koordinatenpaar zusammen. Gegebenenfalls können Sie das unterbinden, indem Sie das Tool durch den Schalter -a anweisen, die Werte nur als Y-Werte zu verstehen – dazu später noch mehr.
Eine andere Interpretation ergibt sich, wenn Sie Graph durch -I e anweisen, Fehlerbalken (“error bars”) zu zeichnen, wie man sie bei natürlichen Messwerten oft angibt. In diesem Fall erwartet Graph Datentripel (x y error), sofern nicht wieder -a aktiviert ist.
Zunächst sollten Sie die Ausgabe der Daten immer in einem X-Fenster testen (Abbildung 1). In diesem Fall spezifizieren Sie außer dem Ausgabegerät X nichts (graph -T X Daten), alles weitere erledigt das Programm automatisch. [Q] oder ein Mausklick in das Fenster schließt dieses wieder.
Kurven und Linien
Treten Leerzeilen in den Eingabedaten auf, interpretiert Graph sie als Beginn einer neuen Kurve, die es dann entsprechend anders anzeigt – ein Beispiel dazu zeigt Abbildung 2. Analog geht das Programm auch dann vor, wenn Sie Daten aus mehreren Quellen verwenden (Listing 2, erste Zeile). Um die Unterscheidbarkeit der Kurven zu erhöhen, können Sie die Linien mithilfe des Schalters -C (zweite Zeile) auch einfärben (Abbildung 3).
Listing 2
$ graph -TX /tmp/tst /tmp/tst1 $ graph -TX -C /tmp/tst2 /tmp/tst3

Abbildung 2: Mehrere Kurven kennzeichnet Graph durch unterschiedliche Linientypen, selbst wenn sie einander nicht überlagern.

-C erzeugen.” width=”293″ height=”300″ />
Abbildung 3: Farbige Kurven lassen sich bei Bedarf mithilfe des Schalters-C erzeugen. Graph unterstützt bis zu 25 unterscheidbare Linientypen in einer Grafik. Durch -W legen Sie die Linienstärken als Vielfaches der Minimalgröße fest, voreingestellt ist 0.01. Weiterhin lassen sich über den Schalter -S unterschiedliche Linien mit verschiedenen Symbolen kennzeichnen. Dabei definiert das erste Argument das verwendete Symbol, das zweite dessen Größe. Diese Angabe muss vor der verwendeten Linie stehen:
$ graph ... -S3 .02 /tmp/data1
Dies erzeugt Ausgaben wie in Abbildung 4. Dort unterdrückt -m0 zusätzlich noch die Darstellung der Linie, was bei einzelnen Datenpunkten manchmal angeraten erscheint. Das gilt auch für negative Werte bei den Linientypen.

-S markiert Kurven mit Symbolen, selbst wenn Graph die Linien gar nicht darstellt (-m0).” width=”293″ height=”300″ />
-S markiert Kurven mit Symbolen, selbst wenn Graph die Linien gar nicht darstellt (-m0).Achsen und Flächen
Die Option -a dient zur automatischen Benennung der X-Achse und kann Einzeldaten verarbeiten, die nur aus Y-Werten bestehen. Das ist immer dann sinnvoll, wenn es nur eine darzustellende Größe gibt oder sich nur eine der Koordinaten darstellen lässt. Ein Beispiel dazu liefert der Kasten “Probleme mit Datumsangaben”.
Durch -a zählt Graph die X-Werte dann sozusagen hoch, setzt dabei jedoch äquidistante Y-Werte voraus. Sie können diese entweder als Argument übergeben, oder — bei fehlendem Argument – durch Graph automatisch berechnen lassen. Als Argumente kann -a auch zwei Werte verarbeiten. Es interpretiert dann den ersten als Schrittweite und den zweiten als Anfangswert, also beispielsweise ... -a 100 10 ....
Interessant ist auch die Option -q: Mit dieser Option veranlassen Sie Graph, geschlossene Linienzüge einzufärben. So erzeugt der folgende Befehl beispielsweise die Darstellung aus Abbildung 5:
$ echo 10 5 5 15 15 15 10 5 | graph -TX -q 0.5
Um eine geschlossene Fläche zu definieren, müssen hier die Werte des letzten Koordinatenpaars mit jenen des ersten identisch sein. Das Argument von -q stellt dabei die Dichte der Füllfarbe ein; höhere Werte erzeugen dunklere Flächen. Durch Angabe des Schalters -C kommt bei Bedarf zusätzlich Farbe ins Spiel.

-q füllen.” width=”293″ height=”300″ />
Abbildung 5: Flächen lassen sich durch Angabe des Schalters-q füllen. Etwas komplizierter stellt sich die Sache dar, wenn Sie offene Kurven mit -q füllen lassen. In diesem Fall legt Graph eine virtuelle Linie vom Anfangs- zum Endpunkt der Kurve und füllt die damit geschlossenen Flächen (Abbildung 6).

Abbildung 6: Die Füllfunktion kommt auch mit offenen Kurven zurecht, die sie dann durch eine Linie zwischen Anfangs- und Endkoordinate schließt.
Probleme mit Datumsangaben
Möchten Sie zeitabhängige Daten verarbeiten, gibt es dazu zwei Möglichkeiten: Date kann über den Formatstring +"%s" quasi absolute Zeitangaben verwenden. Diese beziehen sich als Angabe der verstrichenen Sekunden auf das Unix-Epochendatum, also den 1. Januar 1970. Nachteil dieser Methode: Die Werte fallen heute relativ hoch aus – date +%s liefert heute einen Wert von gut 1,4 Milliarden Sekunden – und müssen gegebenenfalls umgerechnet werden. In Skripten setzen Sie dazu Bc oder Dc ein, falls die Shell-Syntax nicht ausreicht.
Daneben können Sie auch mit anderen Date-Formatstrings arbeiten, beispielsweise mit der Tagesnummer %d oder der Stunde %I, müssen dann aber dafür sorgen, dass diese Werte sich nicht wiederholen (also die Eingabedateien für Graph entsprechend oft leeren). Alternativ greifen Sie über den Graph-Schalter -a auf die automatisch erzeugten X-Achsen zurück, sofern die Abstände zwischen den Werteerhebungen gleich lang waren.
Auf Achse
Die Achsen und deren Beschriftungen stellen ein wichtiges Element vieler Plots dar. Eine Reihe von Optionen steuern deren Form. So bewirkt -E, dass Graph die angegebene Achse nicht mehr links respektive unten, sondern rechts beziehungsweise oben beschriftet. Mithilfe von -NAchse (x oder y) deaktivieren Sie die entsprechende automatische Achsenbeschriftung. In diesem Fall – oder auch zusätzlich – können Sie mit -X Achsenbeschriftung beziehungsweise -Y Achsenbeschriftung neue Label setzen (Abbildung 7).
Voreingestellt setzt Graph jeweils Marken an jeder Achse, zuzüglich dem Ursprung. Mit -x oder -y stellen Sie bei Bedarf die Beschriftungen der jeweiligen Achse genauer ein. Die Optionen kennen die drei Argumente Minimum, Maximum und Schrittweite. Fehlt eine dieser Angaben oder ersetzen Sie diese durch ein einfaches Minuszeichen, berechnet Graph den entsprechenden Wert automatisch. Der Parameter -R Achse bewirkt, dass Graph die Werte passend rundet.
Mehr Platz
Zu den Besonderheiten von Graph zählt dessen Fähigkeit, eine oder beide Achsen gegebenenfalls logarithmisch zu skalieren. Das geschieht durch -l Achse. Weiterhin lassen sich im Hintergrund der Liniengrafik Gitter anzeigen, die zur Orientierung dienen (Abbildung 8).
Genügt die Größe der Anzeigefläche nicht, stellen Sie mit der Option --bitmap-size eine neue ein. Als Argument erwartet diese Angaben in der Form BreitexHöhe in der Einheit Pixel. Zusätzlich lassen sich auch die verwendeten Fonts mithilfe des Schalters -F einstellen und deren Größe mittels -f anpassen. Hier erwartet Graph eine relative Angabe wie etwa -f .01.
Weitere Möglichkeiten
Neben Graph bringen die Plotutils noch einige weitere nützliche Programme mit. Dazu zählen etwa Plot, ein universeller Konverter für die Ausgaben von Graph, Pic2plot, das PIC-Zeichnungen anzeigt und umwandelt, Plotfont zur Darstellung aller Zeichen in einem Font und Spline, mit dem Sie Daten “glätten”. Hinzu kommen noch einige Exoten für sehr spezielle Aufgaben.
Spline liest Daten entweder vom Standardeingabekanal oder aus einer Datei, bearbeitet diese und schreibt die Ergebnisse als Datenstrom in den Standardausgabekanal. Von dort lassen sie sich abfischen und via Graph anzeigen:
$ spline Eingabedaten | graph -TX ...
In Abbildung 9 sehen Sie ein Beispiel für eine per Spline geglättete und per Graph ausgegebene Kurve.
Fazit
Es macht Spaß, mit den Plotutils schnell mal einen numerischen Datensatz anzusehen – vorausgesetzt, die Daten liegen in einem halbwegs vernünftigen Format vor oder lassen sich schnell dahin umwandeln. Durch den X-Modus müssen Sie dann nicht einmal eine Ausgabedatei erzeugen, und auch das automatische Schließen des Ausgabefensters mit einem Mausklick erweist sich für diesen Anwendungszweck als ideal.
Möchten Sie sauber aufbereitete Grafiken für Präsentationen oder Ähnliches aus den Daten erstellen, sollten Sie dagegen unbedingt eine SVG-Ausgabe erzeugen und diese dann mit Inkscape nachbearbeiten. Die Originaldokumentation [2] zu den Plotutils verrät noch viele weitere Details.
Infos
[1] Plotutils: http://www.gnu.org/software/plotutils/
[2] Dokumentation: http://www.gnu.org/software/plotutils/manual/









