17. Feb 2020
Lesedauer 13 Min.
Gnuplot im Einsatz
Perfekte Grafiken
Einführung in das Visualisieren von Datenreihen und mathematischen Funktionen.

Rechenergebnisse werden in vielen technischen, kaufmännischen und naturwissenschaftlichen Arbeitsbereichen in Form grafischer Ausgaben dargestellt. Software zur Ausgabe von Grafiken selbst zu programmieren ist meist aufwendig und nicht gerade einfach. Für die Ausgabe qualitativ hochwertiger Grafiken sollte man also fertige Anwendungen benutzen. Hier wird das Urgestein der Funktionsplotter, Gnuplot, vorgestellt.Gnuplot [1] ist ein skript- beziehungsweise kommandozeilengesteuertes Computerprogramm zur grafischen Darstellung von Messdaten und mathematischen Funktionen. Das Open-Source-Projekt wird seit 1986 kontinuierlich vorangetrieben. Die aktuelle Version (Dezember 2019) ist 5.2.8.Gnuplot läuft unter Windows, Linux und macOS. Nach dem Herunterladen wird im Setup-Programm die gewünschte Ausgabekonsole eingestellt. Unter Windows wird man in der Regel die Windows-Konsole wählen. Als Alternative steht noch das – hier nicht näher behandelte – Qt-Ausgabefenster zur Verfügung. Will man dieses nutzen, müssen zusätzlich die passenden Qt-Bibliotheken auf dem Rechner vorhanden sein.
Erste Tests
Für den allerersten Test öffnen Sie ein Windows-Kommandozeilenfenster und starten das Grafikprogramm durch den Aufruf von
<span class="hljs-attribute">gnuplot</span>
gefolgt von der Eingabetaste. Das Programm meldet sich mit der Versionsnummer sowie einigen zusätzlichen Informationen, etwa dem Link zur Homepage. Außerdem ändert sich der Kommandozeilen-Prompt in gnuplot>. Die Software ist dann bereit, Plot-Befehle entgegenzunehmen.Startet das Programm bei Ihnen nicht, müssen Sie entweder mit cd pfad zum Installationspfad von Gnuplot wechseln oder den Pfad zur path-Variable von Windows hinzufügen.Zum Start soll nun eine ganz einfache Parabel erzeugt werden, also ein Graph der Funktion y = x2 (oder: f(x) = x2). Das klappt durch Eingabe des folgenden Befehls:
<span class="hljs-keyword">plot</span> x**<span class="hljs-number">2</span>
Nach Abschluss der Eingabe mit der Eingabetaste erscheint ein neues Fenster mit der gewünschten Grafik (Bild 1). Das „doppelte Multiplikationszeichen“ sorgt in Gnuplot für die Potenzierung.

Plotten mit Gnuplot(Bild 1)
Autor
Das Ausgabefenster bietet ein kleines Menü. Unter Optionen können Sie einige Einstellungen verändern – etwa Schriftart oder Hintergrundfarbe – und die Grafik als Meta-Datei speichern oder in die Zwischenablage kopieren sowie ausdrucken. Sie können aber auch bestimmte Teile der Grafik vergrößern, um diese genauer zu betrachten. Hierzu ziehen Sie nicht wie sonst üblich mit der linken, sondern mit der rechten Maustaste den gewünschten Betrachtungsbereich auf. Verschiedene Parameter können Sie dabei direkt mit dem Mausrad beeinflussen. Durch Drehen des Mausrades verschieben Sie die Position der x-Achse. Durch zusätzliches Drücken und Festhalten der Umschalttaste (Shift) wird die
y-Achse verschoben. Mithilfe der [Strg]-Taste und dem Mausrad ändern Sie die Skalierung der gesamten Grafik.Aber das ist natürlich noch längst nicht alles. Grundsätzlich funktioniert Gnuplot so, dass zunächst diverse Einstellungen und Optionen mit dem set-Befehl definiert oder mit dem unset-Befehl zurückgesetzt werden. Danach wird ein bestimmter plot-Befehl aufgerufen. Hier müssen natürlich in erster Linie diejenigen Daten angegeben werden, die grafisch dargestellt werden sollen. Eine etwas aufwendigere Grafik könnte wie folgt erstellt werden:
y-Achse verschoben. Mithilfe der [Strg]-Taste und dem Mausrad ändern Sie die Skalierung der gesamten Grafik.Aber das ist natürlich noch längst nicht alles. Grundsätzlich funktioniert Gnuplot so, dass zunächst diverse Einstellungen und Optionen mit dem set-Befehl definiert oder mit dem unset-Befehl zurückgesetzt werden. Danach wird ein bestimmter plot-Befehl aufgerufen. Hier müssen natürlich in erster Linie diejenigen Daten angegeben werden, die grafisch dargestellt werden sollen. Eine etwas aufwendigere Grafik könnte wie folgt erstellt werden:
<span class="hljs-keyword">set</span> title <span class="hljs-string">"Zweiter Versuch"</span>
<span class="hljs-keyword">set</span> xrange [-2.0:2.0]
<span class="hljs-keyword">set</span> yrange [-10:10]
<span class="hljs-keyword">plot</span> x**3
Hier wird zunächst ein Grafiktitel mit einem set-Befehl definiert, der oberhalb der Grafik ausgegeben wird. Danach werden die gewünschten Darstellungsbereiche in x- und y-Richtung vorgegeben. Solche Bereichsangaben erwartet Gnuplot in eckigen Klammern und getrennt durch einen Doppelpunkt, also in der Form [start:ende]. Nach dem Setzen aller Parameter folgt der abschließende plot-Befehl, dieses Mal für die Funktion y = x3. Um die Gnuplot-Konsole zu beenden, geben Sie exit ein.
Plot-Befehle in einer Datei
Wenn man „mal eben etwas ausprobieren“ möchte, dann ist die Gnuplot-Konsole dafür die erste Wahl. Zumeist ist es jedoch sinnvoller, Gnuplot-Skripte auf einem Datenträger zu speichern und bei Bedarf aufzurufen. Das ist dann besonders interessant, wenn die darzustellenden Daten ebenfalls in einer Textdatei vorliegen.Ein Gnuplot-Skript ist eine Textdatei, die von der Windows-Kommandozeile aus geladen und ausgeführt werden kann. Ein erstes Beispiel dazu: Erstellen Sie – zum Beispiel mit Notepad – die folgende Datei und speichern Sie sie unter dem Namen skript1.gplt:
# Eine Gnuplot-Datei zum darstellen einer Funktion
a = 3.5
b = 0.75
<span class="hljs-keyword">set</span> xrange [0:40]
<span class="hljs-built_in">f</span>(x) = a * <span class="hljs-built_in">sin</span>(b * x)
# Ausgabe der Funktion
<span class="hljs-keyword">plot</span> <span class="hljs-built_in">f</span>(x)
<span class="hljs-keyword">pause</span> -1
Anschließend können Sie das Skript mit gnuplot skript1.gplt aus dem Konsolenfenster heraus ausführen. Die Grafik erscheint wieder in einem normalen Windows-Fenster. Zeilen, die mit dem Zeichen # beginnen, sind – Sie ahnen es – Kommentarzeilen. In den weiteren Zeilen werden die Konstanten a und b definiert und der Ausgabebereich für die x-Achse festgelegt. Der Ausgabebereich für die y-Achse wird nicht angeben, Gnuplot soll ihn selbst ermitteln.In Zeile 5 wird nun eine Funktion f(x) angegeben, die einerseits die Konstanten a und b benutzt und andererseits die Laufvariable x anwendet, um den Funktionsplot im angegebenen Bereich zu erstellen. In der vorletzten Zeile des Skripts wird die Funktion f(x) mit dem plot-Befehl ausgegeben. Die letzte Zeile dieses kleinen Beispiels sorgt dafür, dass das Ausgabefenster nicht sofort wieder geschlossen wird. Die Zahl hinter dem pause-Befehl gibt die Anzahl der Sekunden an, die das Fenster offen bleibt. Der Sonderfall -1 hält das Fenster so lange offen, bis der Anwender es schließt. Bild 2 zeigt die schöne Sinuskurve, welche das kurze Skript erzeugt.

Die Sinuskurveaus skript1.gplt(Bild 2)
Autor
Es geht noch schöner
Das nächste Beispiel zeigt noch einige Möglichkeiten von Gnuplot, die in fast jeder grafischen Ausgabe benötigt werden. Erstellen Sie dazu das folgende Skript:
# Mehrere Funktionen plotten
# Grundeinstellungen
set <span class="hljs-built_in">title</span> <span class="hljs-string">"Sinus- und Cosinus-Funktionen"</span>
set <span class="hljs-built_in">xlabel</span> <span class="hljs-string">"Winkel [rad]"</span>
set <span class="hljs-built_in">ylabel</span> <span class="hljs-string">"sin(x)"</span>
set y2label <span class="hljs-string">"cos(x)*exp(-0.2*x)"</span>
set <span class="hljs-built_in">xrange</span> [<span class="hljs-number">0</span>:<span class="hljs-number">4</span>*pi]
set <span class="hljs-built_in">yrange</span> [-<span class="hljs-number">1.2</span>:<span class="hljs-number">1.2</span>]
set <span class="hljs-built_in">grid</span>
# Funktionen definieren
f1(x) = <span class="hljs-built_in">sin</span>(x)
f2(x) = <span class="hljs-built_in">cos</span>(x) * <span class="hljs-built_in">exp</span>(-<span class="hljs-number">0.2</span> * x)
# Plotausgabe
plot f1(x) <span class="hljs-built_in">title</span> <span class="hljs-string">"Sin"</span> <span class="hljs-built_in">linewidth</span> <span class="hljs-number">3</span> \
dashtype (<span class="hljs-number">4</span>,<span class="hljs-number">2</span>) linecolor rgb <span class="hljs-string">"red"</span>, \
f2(x) <span class="hljs-built_in">title</span> <span class="hljs-string">"Cos"</span> with <span class="hljs-built_in">points</span> \
pointtype <span class="hljs-number">2</span> linecolor rgb <span class="hljs-string">"blue"</span>
pause -<span class="hljs-number">1</span>
Mit den set-Befehlen xlabel, ylabel und y2label werden die Beschriftungen der Achsen in der Grafik erstellt. Bei der Definition von xrange wird der in Gnuplot vordefinierte Wert von pi (3.1415...) benutzt. Schließlich soll ein Gitternetz mit der Option grid ausgegeben werden.Nun werden die beiden Funktionen f1(x) und f2(x) definiert, die in der Grafik dargestellt werden sollen. Schließlich folgt der nun etwas kompliziertere plot-Befehl. Der Backslash (\) dient dazu, längere Befehle auf mehrere Zeilen zu verteilen. Da in diesem Beispiel zwei Funktionen mit demselben plot-Befehl ausgegeben werden sollen, müssen Sie die beiden Funktionen per Komma separiert angegeben. Für die erste Funktion werden im plot-Befehl folgende Parameter gesetzt:
f1(x) title <span class="hljs-string">"Sin"</span> linewidth <span class="hljs-number">3</span> \
dashtype (<span class="hljs-number">4</span>,<span class="hljs-number">2</span>) linecolor rgb <span class="hljs-string">"red"</span>
Es soll die Funktion f1(x) dargestellt werden, in der Legende soll der Text Sin ausgegeben werden, die Linienbreite beträgt drei Pixel, es handelt sich um eine gestrichelte Line folgender Art: vier Pixel zeichnen und zwei Pixel freilassen. Letztlich wird als Linienfarbe die RGB-Farbe rot bestimmt.Auch für die zweite Funktion werden im plot-Befehl detaillierte Angaben gemacht:
<span class="hljs-function"><span class="hljs-title">f2</span><span class="hljs-params">(x)</span></span> title <span class="hljs-string">"Cos"</span> with points pointtype <span class="hljs-number">2</span> \
linecolor rgb <span class="hljs-string">"blue"</span>
Für die Ausgabe der Funktion f2(x) sollen Punkte benutzt werden, der Punkttyp ist 2 (kleine x) und die Farbe soll Blau sein. In Bild 3 sehen Sie das Ergebnis.

Zwei Kurvenmit unterschiedlichen Farben und Symbolen(Bild 3)
Autor
An dieser Stelle muss noch erwähnt werden, dass viele der plot-Parameter auch abgekürzt werden können. Das Beispiel könnte damit auch so aussehen:
plot f1(x) ti <span class="hljs-string">"Sin"</span> lw <span class="hljs-number">3</span> dt (<span class="hljs-number">4</span>,<span class="hljs-number">2</span>) lc <span class="hljs-string">"red"</span>, \
f2(x) ti <span class="hljs-string">"Cos"</span> w p pt <span class="hljs-number">2</span> lc <span class="hljs-string">"blue"</span>
Die hier verwendeten Abkürzungen ersetzen die folgenden Langversionen der Befehle:
- ti = title,
- lw = linewidth, lc = linecolor,
- dt = dashtype, w = with,
- p = points, pt = pointtype
Daten aus Dateien
In der Regel werden Sie die Daten für die Darstellung nicht aus einer mathematischen Funktion f(x) erhalten, sondern aus irgendwelchen anderen Programmen, welche die auszugebenden Daten in einer Textdatei ablegen. Auch dazu ein Beispiel: Zunächst benötigen Sie eine Textdatei namens Daten.txt mit zwei Spalten, deren Werte durch ein Tab-Zeichen getrennt sind:
#Monat Einkommen
<span class="hljs-number">1</span> <span class="hljs-number">23.56</span>
<span class="hljs-number">2</span> <span class="hljs-number">44.74</span>
<span class="hljs-number">3</span> <span class="hljs-number">12.88</span>
<span class="hljs-number">4</span> <span class="hljs-number">67.87</span>
...
Der Rest ist einfach. Die erste Zeile der Textdatei ist wieder mit dem #-Zeichen versehen. Diese Kommentarzeile wird beim Erstellen der Grafik ignoriert. Der benötigte plot-Befehl für ein aus diesen Daten zu generierendes Balkendiagramm sieht so aus:
plot <span class="hljs-string">"Daten.txt"</span> with boxes<span class="hljs-built_in"> fill </span>solid
Die Option with boxes erzeugt ein Balkendiagramm. Der Zusatz fill solid sorgt dafür, dass die Kästen der Balken farbig gefüllt dargestellt werden.Wollen Sie nur einen Teil der Daten ausgeben, dann geben Sie den gewünschten Bereich in eckigen Klammern vor dem Dateinamen an:
plot [7:12] <span class="hljs-string">"Daten.txt"</span> with boxes<span class="hljs-built_in"> fill </span>solid
Mit diesem plot-Befehl werden nur die Zeilen sieben bis zwölf in der Grafik dargestellt.Doch was passiert, wenn die Datei mehrere Datenspalten enthält? Die Datei Daten2.txt hat drei Spalten:
#Monat Einkommen Ausgabe
<span class="hljs-number">1</span> <span class="hljs-number">23.56</span> <span class="hljs-number">7.35</span>
<span class="hljs-number">2</span> <span class="hljs-number">44.74</span> <span class="hljs-number">9.28</span>
...
Der Befehl plot „Daten2.txt“ with boxes liefert hier durchaus nicht das gewünschte Ergebnis, nämlich zwei Balkensequenzen mit unterschiedlicher Farbe. Abhilfe schafft erst der folgende plot-Befehl:
plot <span class="hljs-string">"Daten2.txt"</span> <span class="hljs-keyword">using</span> <span class="hljs-number">1</span>:<span class="hljs-number">2</span> <span class="hljs-keyword">with</span> boxes, \
<span class="hljs-string">"Daten2.txt"</span> <span class="hljs-keyword">using</span> <span class="hljs-number">1</span>:<span class="hljs-number">3</span> <span class="hljs-keyword">with</span> boxes
Die Datenspalten mit den Einnahmen und Ausgaben werden nacheinander gezeichnet. Die zu verwendenden Spalten werden mit dem using-Befehl angegeben. In der ersten Darstellung werden lediglich die Spalten Nr. 1 und 2 verwendet, das zweite Balkendiagramm wird aus den Daten der Spalten Nr. 1 und 3 aufgebaut. Das Ergebnis überzeugt allerdings immer noch nicht, weil die Balken übereinanderliegend ausgegeben werden. Eigentlich möchte man sehen, wie viel Gewinn oder Verlust angefallen sind.Das klappt auch, denn Gnuplot kann rechnen. Soll der Gewinn oder Verlust ausgegeben werden, müssen die Ausgaben (Spalte 3) von den Einnahmen (Spalte 2) abgezogen werden. Hier der entsprechende plot-Befehl:
plot <span class="hljs-string">"Daten2.txt"</span> using 1:($2-$3) \
with boxes<span class="hljs-built_in"> fill </span>solid
Die Berechnung findet in der runden Klammer statt. Man muss dazu die Spaltennummer mit einem Dollar-Zeichen versehen: ($2-$3). Solche Berechnungen können Sie mit allen Daten ausführen. Dabei werden auch komplexere mathematische Funktionen unterstützt.Nun sollen noch die positiven Werte (Überschuss der Einnahmen) mit blauen und negative Werte (Verlust) mit roten Balken angezeigt werden. Ein Verlust ist dann gegeben, wenn $2-$3 < 0 ist:
plot <span class="hljs-string">"Daten2.txt"</span> \
using 1:($2-$3):(($2-$3)>0) ? 0x0000FF<span class="hljs-keyword"> :</span> 0xFF0000 \
with boxes<span class="hljs-built_in"> fill </span>solid linecolor rgb variable notitle
In Bild 4 sehen Sie das Ergebnis dieses plot-Befehls. Er enthält einige neue Optionen: Zuerst wird wieder die Datendatei angegeben. Auszugeben sind die Daten aus Spalte 1 und das Ergebnis der Subtraktion (Spalte 2 – Spalte 3). Danach steht erneut ein Doppelpunkt:

Balkendiagrammder Gewinne und Verluste(Bild 4)
Autor
<span class="hljs-meta">:(($2-$3)>0) ? 0x0000FF:0xFF0000</span>
Diese Schreibweise ist C-, C#- und C++-Programmierern unter dem Namen bedingte Anweisung bekannt. Der Term generiert eine neue Variable. Ist $2-$3 größer als null, wird die Variable auf 0x0000FF gesetzt, ansonsten wird der Wert 0xFF0000 gespeichert.Es folgt die Angabe with boxes fill solid für die gefüllten Balken. Als Nächstes wird die Farbe für die Balken festgelegt. Hierbei wird der berechnete Wert in der Variablen benutzt. Statt nach linecolor rgb eine feste Farbe anzugeben, wird der Wert aus der Variablen eingesetzt. Dadurch werden alle Balken mit einem negativen Wert in Rot dargestellt. Fehlt nur noch das Schlüsselwort notitle am Ende des plot-Befehls. Diese Klausel sorgt einfach nur dafür, dass für die dargestellte Datenreihe keine Legende ausgegeben wird.
Grafiken speichern
Sie können die mit Gnuplot erzeugten Grafiken auch speichern. Allgemeiner gesagt, können die Grafiken auf unterschiedlichen „Geräten“ ausgegeben werden: Auf einem Bildschirm, Druckern oder als Datei auf Festplatte. Welche Ausgabeformate die bei Ihnen installierte Version von Gnuplot unterstützt, ermitteln Sie mit folgendem Befehl:
<span class="hljs-keyword">set</span> terminal
Gnuplot gibt daraufhin eine Liste der verfügbaren Ausgabeformate aus. Diese Liste hat in Version 5.2.5 mehr als 40 Einträge, darunter Dateiformate wie jpeg, gif, png, svg, emf oder dxf, Drucker- oder Plotterformate wie postscript, pcl5 oder hpgl, das HTML-Canvas-Objekt und auch Formate für spezielle Anwendungen, etwa für LaTeX oder Qt. Die Ausgabe in einem Windows-Fenster (Standardeinstellung bei Installationen unter Windows) setzen Sie mit:
<span class="hljs-keyword">set</span> terminal <span class="hljs-comment">windows</span>
Um eine Grafik in einem bestimmten Ausgabeformat (hier jpeg) in einer Datei zu speichern, gehen Sie wie folgt vor:
# <span class="hljs-keyword">Format</span> auswählen
<span class="hljs-keyword">set</span> terminal jpeg
# Name der Ausgabedatei
<span class="hljs-keyword">set</span> output <span class="hljs-string">"test.jpg"</span>
# <span class="hljs-keyword">Plot</span> erstellen, die Grafik wird im gewählten
# <span class="hljs-keyword">Format</span> <span class="hljs-keyword">in</span> die Datei geschrieben
<span class="hljs-keyword">plot</span> x**2
# Hinweis: Es erscheint kein Fenster!
Im aktuellen Arbeitsverzeichnis steht nach der Ausführung der drei Befehle die Datei test.jpg mit der gewünschten Grafik zur Verfügung.
Farben, Styles und mehr
Im folgenden Skript werden Stile (style) benutzt, um das Aussehen von Linien bereits vor deren Benutzung zu definieren. Dadurch wird der plot-Befehl einfacher, übersichtlicher und besser lesbar.# Legende oben links
<span class="hljs-keyword">set</span> key at graph <span class="hljs-number">0.2</span>, <span class="hljs-number">0.9</span> spacing <span class="hljs-number">1.5</span> \
font <span class="hljs-string">'Helvetica, 14'</span>
# Stil <span class="hljs-keyword">f</span>ür die Linien festlegen
# dt = dashtype, <span class="hljs-keyword">lw</span> = linewidth
# <span class="hljs-keyword">lc</span> = linecolor
<span class="hljs-keyword">set</span> style <span class="hljs-built_in">line</span> <span class="hljs-number">1</span> dt (<span class="hljs-number">4</span>,<span class="hljs-number">4</span>) <span class="hljs-keyword">lw</span> <span class="hljs-number">2</span> <span class="hljs-keyword">lc</span> \
rgb <span class="hljs-string">'0xff0000'</span>
<span class="hljs-keyword">set</span> style <span class="hljs-built_in">line</span> <span class="hljs-number">2</span> <span class="hljs-keyword">lw</span> <span class="hljs-number">6</span> <span class="hljs-keyword">lc</span> rgb <span class="hljs-string">'0x800080'</span>
<span class="hljs-keyword">set</span> style <span class="hljs-built_in">line</span> <span class="hljs-number">3</span> dt (<span class="hljs-number">4</span>,<span class="hljs-number">2</span>) <span class="hljs-keyword">lw</span> <span class="hljs-number">1</span> <span class="hljs-keyword">lc</span> \
rgb <span class="hljs-string">'0x0000ff'</span>
<span class="hljs-keyword">set</span> style <span class="hljs-built_in">line</span> <span class="hljs-number">4</span> dt (<span class="hljs-number">10</span>,<span class="hljs-number">5</span>,<span class="hljs-number">5</span>,<span class="hljs-number">2</span>) <span class="hljs-keyword">lw</span> <span class="hljs-number">2</span> <span class="hljs-keyword">lc</span> \
rgb <span class="hljs-string">'0x0080ff'</span>
# Plot von <span class="hljs-number">4</span> Funktionen, <span class="hljs-keyword">ls</span> = linestyle
plot [<span class="hljs-number">0</span>:<span class="hljs-number">1</span>] <span class="hljs-keyword">x</span>**<span class="hljs-number">0.5</span> <span class="hljs-keyword">ls</span> <span class="hljs-number">3</span>, \
<span class="hljs-keyword">x</span> <span class="hljs-keyword">ls</span> <span class="hljs-number">2</span>, \
<span class="hljs-keyword">x</span>**<span class="hljs-number">2</span> <span class="hljs-keyword">ls</span> <span class="hljs-number">1</span>, \
<span class="hljs-keyword">x</span>**<span class="hljs-number">3</span> <span class="hljs-keyword">ls</span> <span class="hljs-number">4</span>
# Fenster geöffnet lassen
pause -<span class="hljs-number">1</span>
Zunächst soll die Legende zu dieser Grafik nicht oben rechts ausgegeben werden (das ist der Standard), sondern oben links. Dazu wird das relative Koordinatensystem der Grafik angewendet. Die untere linke Ecke hat die Werte (0.0, 0.0), die obere rechte Ecke den Wert (1.0, 1.0). Im Beispiel wird die Legende an der Stelle (0.2, 0.9) ausgegeben. Die erste Zahl ist der Abstand von linken Rand und die zweite Zahl der Abstand vom unteren Rand der Grafik. Es soll weiterhin der 14-Punkt-Helvetica-Font mit einem Zeilenabstand von 1.5-fach benutzt werden.Danach werden vier Stildefinitionen angegeben. Ein Stil beginnt hier immer mit set style line und es folgt eine ganze Zahl. Nun können verschiedene Definitionen für diesen Linienstil angegeben werden. Sie können die Linienbreite (linewidth, lw), den Linientyp (linetype, lt), die Linienfarbe (linecolor, lc) und andere Parameter angeben.Im plot-Befehl wird nun lediglich noch eingetragen, welche Daten dargestellt werden sollen und mit welchem Stil das geschehen soll. Zum Beispiel:
<span class="hljs-keyword">plot</span> [0:1] x**2 <span class="hljs-keyword">ls</span> 2
Dieser Befehl zeichnet die Funktion x² im x-Bereich von 0.0 bis 1.0 unter Benutzung des Linienstils 2 (linestyle, ls). Die gesamte Grafikausgabe aus dem obigen Skript zeigt Bild 5. Interessant ist, dass die benutzen Stil-Deklarationen oben im Windows-Ausgabefenster in Form kleiner Scheren-Schaltflächen angezeigt werden. Man kann die einzelnen Styles über diese Schaltflächen ein- oder ausschalten, also sichtbar oder unsichtbar machen. Alternativ kann man auch die jeweilige Zeile in der Legende anklicken.

Linienstilebenutzen(Bild 5)
Autor
In einem Linienstil lässt sich auch definieren, wie die Punkte auf der Linie dargestellt werden sollen. Hierzu benutzt man die Befehle pointsize (ps), pointtype (pt) und pointinterval (pi). Hier ein Beispiel:
<span class="hljs-keyword">set</span> style <span class="hljs-built_in">line</span> <span class="hljs-number">1</span> <span class="hljs-keyword">lw</span> <span class="hljs-number">4</span> <span class="hljs-keyword">lc</span> rgb <span class="hljs-string">'0xff0000'</span> \
<span class="hljs-keyword">ps</span> <span class="hljs-number">3</span> <span class="hljs-keyword">pt</span> <span class="hljs-number">6</span> pi <span class="hljs-number">5</span>
Es werden Punkte in der Größe 3 vom Punkttyp 6 (kleine Kreise) verwendet. Die größten Vorteile von Linienstilen: Die plot-Befehle werden kürzer und damit besser lesbar. Außerdem kann ein Stil mehrfach verwendet und dadurch Tipparbeit eingespart werden.
Mehrere Plots parallel zeichnen
Oft sollen in einer Ausgabe mehrere Grafiken zugleich dargestellt werden. Zum Beispiel kann ein kleiner Ausschnitt der Hauptgrafik in einem separaten Fenster vergrößert dargestellt werden, um die Details besser erkennen zu können. Um mehrere Plots in einem Ausgabefenster zu erstellen, muss die Option multiplot gesetzt werden. Wie Sie dabei vorgehen, zeigt Listing 1.Listing 1: Mehrere Plots
# Mehrere Plots darstellen <br/><span class="hljs-keyword">set</span> multiplot <br/><br/># Erster <span class="hljs-keyword">Plot</span>... <br/># Rechteck um linken Teil der Grafik <br/># Pfeil zum Unterfenster zeichnen im <br/># Koordinatensystem der Grafik <br/><span class="hljs-keyword">set</span> object rectangle from 0.0, -1.5 to 0.2, 1.5 <br/><span class="hljs-keyword">set</span> arrow from 0.2, 1.5 to screen 0.1, \<br/> 0.3 front linecolor rgb 'red' <br/># Auflösung hoch setzen <br/><span class="hljs-keyword">set</span> samples 1000 <br/># Grid und Ticks einschalten <br/><span class="hljs-keyword">set</span> grid <br/><span class="hljs-keyword">set</span> xtics 0.5 <br/><span class="hljs-keyword">set</span> ytics 10 <br/># Erster <span class="hljs-keyword">Plot</span> im groß<span class="hljs-keyword">en</span> Fenster <br/><span class="hljs-keyword">plot</span> [0:2*pi] <span class="hljs-built_in">exp</span>(x)*<span class="hljs-built_in">sin</span>(1/x) linecolor rgb 'blue' <br/><br/># Zweiter <span class="hljs-keyword">Plot</span>... <br/># Unterfenster definieren <br/># Position und <span class="hljs-keyword">Gr</span>öß<span class="hljs-keyword">e</span> <span class="hljs-keyword">in</span> relativen Koordinaten<br/>set origin 0.1, 0.3 <br/><span class="hljs-keyword">set</span> size 0.3, 0.3 <br/># Unterfensterinhalt <span class="hljs-keyword">l</span>öschen <br/><span class="hljs-keyword">clear</span> <br/># Keine Legende, Rechteck, Pfeil <br/>unset key <br/>unset object <br/>unset arrow <br/># Ticks im Unterfenster <br/><span class="hljs-keyword">set</span> xtics 0.05 <br/><span class="hljs-keyword">set</span> ytics 0.5 <br/># Abstand <span class="hljs-keyword">des</span> Plots vom Rand <span class="hljs-keyword">des</span> Unterfensters <br/><span class="hljs-keyword">set</span> bmargin 1 <br/><span class="hljs-keyword">set</span> tmargin 1 <br/><span class="hljs-keyword">set</span> lmargin 3 <br/><span class="hljs-keyword">set</span> rmargin 1 <br/># Zweiter <span class="hljs-keyword">Plot</span> im Unterfenster <br/><span class="hljs-keyword">plot</span> [0:0.2] <span class="hljs-built_in">exp</span>(x)*<span class="hljs-built_in">sin</span>(1/x) <br/><br/># Multiplot wieder ausschalten <br/>unset multiplot <br/><span class="hljs-keyword">pause</span> -1
Im Beispielprogramm wird zunächst die Option multiplot gesetzt. Danach wird ein Rechteck gezeichnet, welches einen kleinen Ausschnitt für die zweite Grafik in der Hauptgrafik markiert. Weiterhin wird ein Pfeil vom diesem Rechteck zur Position der inneren Grafik gezeichnet. Hierbei werden verschiedene Koordinatensysteme benutzt. Das kleine Rechteck wird im Koordinatensystem der Hauptgrafik definiert (von x = 0.0, y = -1.5 nach x = 0.2, y = 1.5). Beim Pfeil wird der Startpunkt ebenfalls in den Koordinaten der Hauptgrafik angegeben (von x = 0.2, y = 1.5). Das ist die obere rechte Ecke des Rechtecks. Die Endposition des Pfeils wird jedoch, der Einfachheit halber, in relativen Fensterkoordinaten angegeben (screen x = 0.1, y = 0.3). Das gesamte Ausgabefenster bekommt immer ein relatives Koordinatensystem: Die Ecke links unten ist (0.0, 0.0) und die Ecke rechts oben hat die Koordinaten (1.0, 1.0). Der Pfeil endet also an Position (0.1, 0.3) in diesen relativen Koordinaten. An dieser Stelle wird später des kleine innere Fenster für die Zusatzgrafik erstellt.Nun wird die Auflösung der Grafikplots mit set samples 1000 hochgesetzt, damit die Funktion ohne unschöne Sprünge dargestellt wird. Danach wird das Grid eingeschaltet und der Abstand der Ticks in x- und y-Richtung wird gesetzt. Schließlich kann die Grafik im Hauptfenster ausgegeben werden. Der gewählte x-Bereich ist an dieser Stelle von 0 bis 2*pi. Gewählt wird die Funktion:
f(<span class="hljs-name">x</span>) = exp(<span class="hljs-name">x</span>) * sin(<span class="hljs-number">1</span>/x)
Diese Funktion schwingt bei kleinen x-Werten sehr schnell hin und her. Dieser Wertebereich soll in einer kleinen inneren Grafik vergrößert dargestellt werden.Dazu werden zuerst Position und Größe des inneren Plot-Fensters mit set origin beziehungsweise set size in relativen Koordinaten angegeben. Nun wird der Inhalt des Unterfensters mit clear gelöscht und die Darstellung von Legende, Rechteck und Pfeil wird mit unset ausgeschaltet, denn diese drei Grafikelemente sollen nur im Hauptfenster sichtbar sein.Nun werden der Abstand der Ticks (xtics und ytics) in der kleinen Grafik und der Abstand des Plots vom Rand des Unterfensters (?margin) gesetzt. Schließlich kann die Grafik im Unterfenster gezeichnet werden. Hier wird nur ein kleiner x-Bereich von 0.0 bis 0.2 ausgegeben. Am Ende des Skripts wird der multiplot-Modus mit unset wieder ausgeschaltet. In Bild 6 sehen Sie das Ergebnis.

Mehrere Plotsin einer Ausgabe(Bild 6)
Autor
Und nun wird’s dreidimensional
Dreidimensionale Grafiken sehen häufig besonders gut aus. Auch Gnuplot kann etliche Varianten dieses Grafiktyps erstellen. Diese Plots werden in der Regel mit dem Befehl splot (= surface plot) erstellt:
<span class="hljs-built_in">set</span> isosamples <span class="hljs-number">100</span>
splot <span class="hljs-built_in">exp</span>(<span class="hljs-number">-0.1</span>*(x*x + y*y))*<span class="hljs-built_in">sin</span>(x)*<span class="hljs-built_in">cos</span>(y)
Die erste Zeile des Beispiels erhöht die Auflösung der Darstellung, und in der zweiten Zeile wird schon die Grafik mit dem Befehl splot ausgegeben. Die eingetragene Funktion ist von zwei Parametern abhängig: f(x, y). Gnuplot berechnet nun für sowohl für die x- als auch für die y-Richtung die zugehörigen z-Werte der Funktion und stellt diese dreidimensional dar (Bild 7). Im Ausgabefenster können Sie die Grafik mit der Maus in jede gewünschte Ansichtsposition drehen.

Einfache 3D-Grafikmit Gnuplot(Bild 7)
Autor
Alle Gnuplot-Features, die Sie bisher für 2D-Plots kennengelernt haben, können auch für 3D-Grafiken benutzt werden. Etwa set title für einen Titeltext, set xrange und yrange für den Darstellungsbereich oder setterminal zum Einstellen des Ausgabemediums.Allerdings ist die Darstellung der Grafik in Bild 7 noch nicht optimal, da alle Linien – auch die eigentlich nicht sichtbaren Linien – gezeichnet werden. Benötigt wird nun eine Technik, die sich hidden line removal (entfernen verdeckter Linien) nennt. Die Anwendung in Gnuplot ist denkbar einfach:
<span class="hljs-built_in">set</span> isosamples <span class="hljs-number">100</span>
<span class="hljs-built_in">set</span> hidden
splot <span class="hljs-built_in">exp</span>(<span class="hljs-number">-0.1</span>*(x*x + y*y))*<span class="hljs-built_in">sin</span>(x)*<span class="hljs-built_in">cos</span>(y)
In der zweiten Zeile des Beispiels setzt man einfach die Option hidden. Nun werden in der Grafik nur noch die Linien dargestellt, die aus dem jeweiligen Blickwinkel auch tatsächlich sichtbar sind (Bild 8).

3D-Plotohne verdeckte Linien(Bild 8)
Autor
Auf Wunsch lässt sich die Grafik noch mit farblichen Abstufungen aufpeppen:
<span class="hljs-built_in">set</span> isosamples <span class="hljs-number">100</span>
<span class="hljs-built_in">set</span> hidden
<span class="hljs-built_in">set</span> pm3d
splot <span class="hljs-built_in">exp</span>(<span class="hljs-number">-0.1</span>*(x*x + y*y))*<span class="hljs-built_in">sin</span>(x)*<span class="hljs-built_in">cos</span>(y)
Der Befehl set pm3d wählt hier eine bestimmte Palette von Farben aus, die bei der Darstellung der Grafik mit dem jeweiligen Wert von f(x, y) kombiniert werden. Die Legende für diese Farben wird rechts neben der Grafik ausgegeben.
Höhenliniendiagramme
Diese Art der grafischen Darstellung kennen Sie sicherlich von Landkarten. In einer zweidimensionalen Grafik werden die Stellen gleicher Höhe durch Linien miteinander verbunden. Listing 2 zeigt das vollständige Skript für das Erzeugen eines Höhenlinienplots.Listing 2: Ein Höhenlinienplot
# <span class="hljs-keyword">H</span>öhenliniendiagramm <br/># Anzahl der <span class="hljs-keyword">H</span>öhenlinien <br/><span class="hljs-keyword">set</span> cntrparam <span class="hljs-keyword">levels</span> 10 <br/><span class="hljs-keyword">set</span> contour base <br/># Oberfläche nicht darstellen <br/>unset surface <br/># Blick genau von oben <br/><span class="hljs-keyword">set</span> <span class="hljs-keyword">view</span> map <br/># Bereich der Darstellung <br/><span class="hljs-keyword">set</span> xrange [-4:4] <br/><span class="hljs-keyword">set</span> yrange [-4:4] <br/># Auflösung definieren <br/><span class="hljs-keyword">set</span> samples 400 <br/><span class="hljs-keyword">set</span> isosamples 400 <br/># Position der Legende <br/><span class="hljs-keyword">set</span> key rmargin <br/># <span class="hljs-keyword">Plot</span> erstellen <br/>splot <span class="hljs-built_in">sin</span>(x)*<span class="hljs-built_in">cos</span>(y) <br/><span class="hljs-keyword">pause</span> -1
Zu Beginn des Beispielskripts werden mit set cntrparam zunächst die Anzahl der Höhenlinien und die Art der Darstellung (set contour base) gesetzt. Danach wird die Darstellung der Oberfläche mit unset surface ausgeschaltet. Wird diese Option nicht gewählt, werden die Höhenlinien durch ein dichtes Raster überlagert. Dabei handelt es sich um die Kanten der Oberflächenpolygone, die senkrecht von oben gesehen werden.Das Höhenliniendiagramm soll genau von oben betrachtet werden. Dazu wird der Befehl set view map angegeben. Nun werden x- und y-Bereich sowie die gewünschte Auflösung der grafischen Darstellung definiert. Bei Höhenliniendiagrammen muss die Auflösung etwas höher gesetzt werden, damit man schöne, kontinuierliche Höhenlinien erhält.Schließlich wird die Position der Legende in den Ausgabebereich rechts außerhalb der Grafik gelegt und danach die Funktion f(x, y)=sin(x)*cos(y) mit dem Befehl splot gezeichnet, siehe Bild 9.

Ein Höhenlinienplot(Bild 9)
Autor
Zusammenfassung
In diesem Artikel konnten nur einige wenige Möglichkeiten von Gnuplot vorgestellt werden. Aber bereits daraus können Sie ermessen, dass diese Grafikbibliothek sehr umfangreich und sehr leistungsfähig ist. Es gibt wohl für fast jede grafische Anwendung eine Lösung mit Gnuplot. Unter [2] finden Sie eine große Anzahl von Demos, die demonstrieren, was mit Gnuplot alles möglich ist und welche zusätzlichen neuen Grafikformate derzeit in Arbeit sind. Eine 270 Seiten starke, englischsprachige Dokumentation zu Gnuplot 5.2 ist im PDF-Format unter [3] zu finden.Fussnoten
- Gnuplot-Homepage, http://www.gnuplot.info
- Gnuplot-Demos, http://www.dotnetpro.de/SL2003GnuPlot1
- Gnuplot-Dokumentation (PDF), http://www.dotnetpro.de/SL2003GnuPlot2