• Beitrags-Autor:
  • Beitrag zuletzt geändert am:09.05.2021
  • Beitrags-Kategorie:Informatik
  • Lesedauer:21 min Lesezeit

GnuPlot ist ein kommandozeilenorientiertes und interaktives wissenschaftliches Plotprogramm, welches die Möglichkeit gibt, Daten und Funktionen graphisch darzustellen. Dabei können neben x-y-Diagrammen ebenso 3D-Diagramm gezeichnet werden und in verschiedene Ausgabeformate gespeichert werden. GnuPlot ist für verschiedene Betriebssysteme und Architekturen als Quelltext verfügbar, zu beziehen unter http://www.gnuplot.info. Für Windows, DOS und OS/2 stehen auch fertig kompilierte Binaries zur Verfügung.

Erster Start

GnuPlot wird an der Kommandozeile gestartet und begrüßt einem mit dem Prompt

gnuplot>

an dem die Kommandos zum Zeichnen eines Graphen angegeben werden können. Alternativ können die Kommandos in einer Datei abgelegt werden und in GnuPlot geladen werden, entweder GnuPlot mit dem Namen der Datei aufrufen (z.B. gnuplot test.gplt um die Kommandos aus test.gplt zu laden) oder am Prompt über

gnuplot> load "test.gplt"

Kommandos zur Graphformatierung

Achsen beschriften

Für die Achsenbeschriftung stehen die folgenden Kommandos zur Verfügung:

  • set xlabel 'text': Beschriftung der X-Achse
  • set ylabel 'text': Beschriftung der Y-Achse
  • set title 'text': Beschriftung des Diagramms (Diagramm-Titel)

Wird als Ausgabe LaTeX gewählt, können hier auch LaTeX-Befehle eingegeben werden, die zwar nicht in GnuPlot, jedoch in LaTeX richtig angezeigt werden.

Tickseinstellung auf den Achsen

Hauptticks

Die beschrifteten Hauptticks können über die u.a. set-Kommandos eingestellt werden. Als Parameter für die Einstellung der Hauptticks ist die folgende Syntax möglich:

parameter := {axis | border} {{no}mirror} {{no}rotate {by }}
             { autofreq | ; | , {,} | ({"<label>"} {} {,{"<label>"}...) }
             { font "name{,}" }
             { textcolor }
  • set xtics: Setzten der Einstellungen der Hauptticks für die X-Achse
  • set ytics: Setzten der Einstellungen der Hauptticks für die Y-Achse
  • set ztics: Setzten der Einstellungen der Hauptticks für die Z-Achse
  • set x2tics: Setzten der Einstellungen der Hauptticks für die X2-Achse
  • set y2tics: Setzten der Einstellungen der Hauptticks für die Y2-Achse
  • set cbtics: Setzten der Einstellungen der Hauptticks für die CB-Achse
Beschreibung der Parameter
  • axis: Ticks werden an der Achse gesetzt;
  • border: Ticks werden am Rand gesetzt;
  • {no}mirror: mirror setzt unbeschriftete Ticks an der selben Position auf dem gegenüberliegenden Rand, nomirror setzt diese nicht;
  • {no}rotate {by}: rotate dreht die Beschriftung um 90° oder um die Gradzahl, die mit {by} angegeben wurde (wird nicht von allen Terminaltypen unterstützt); norotate unterbindet die Drehung.

Unterticks

Die <freq> ist die Anzahl der Subintervals zwischen den Hauptticks (nicht die Anzahl der Unterticks). Wird default angegeben, wird zum Standardwert gewechselt, für lineare Achsen ist dies 2 oder 5 in Abhängigkeit der Hauptticks.

  • set mxtics {| default}: Setzt die Unterticks-Einstellung für die X-Achse
  • set mytics {| default}: Setzt die Unterticks-Einstellung für die Y-Achse
  • set mztics {| default}: Setzt die Unterticks-Einstellung für die Z-Achse
  • set mx2tics {| default}: Setzt die Unterticks-Einstellung für die X2-Achse
  • set my2tics {| default}: Setzt die Unterticks-Einstellung für die Y2-Achse

Ticks als Monatsnamen

Sollen die Achsen mit Monatsnamen beschriftet werden, so kann dies über die nachfolgenden Kommandos eingestellt werden. Dabei werden die Zahlen 1-12 zu den Monaten Jan-Dez umgewandelt. Überläufe werden mittels Modulo 12 auf einen gültigen Wert umgerechnet.

  • set xmtics: Setzt die X-Achsen Ticks auf Monatsdarstellung
  • set ymtics: Setzt die Y-Achsen Ticks auf Monatsdarstellung
  • set zmtics: Setzt die Z-Achsen Ticks auf Monatsdarstellung
  • set x2mtics: Setzt die X2-Achsen Ticks auf Monatsdarstellung
  • set y2mtics: Setzt die Y2-Achsen Ticks auf Monatsdarstellung
  • set cbmtics: Setzt die Farbenboxachsen Ticks auf Monatsdarstellung

Diagramm-Ränder

Die Diagramm-Ränder werden automatisch berechnet, für eine Feineinstellung können die folgenden Einstellungen verändert werden.

  • set tmargin {}: setzt den oberen Rand
  • set bmargin {}: setzt den unteren Rand
  • set lmargin {}: setzt den linken Rand
  • set rmargin {}: setzt den rechten Rand
  • show margin: zeigt die aktuellen Werte für die Ränder an

Die Einheit für <margin> sind Zeichenhöhe bzw. Zeichenbreite. Ein positiver Wert setzt die absolute Größe des Randes, ein negativer Wert (oder kein Wert) setzt diesen Rand wieder auf die automatische Einstellung. Bei 3D-Plots zeigt nur die Einstellung des linken Randes Wirkung.

Automatische Skalierung der Achsen

Die automatische Skalierung der Achsen wird über die Einstellung autoscale eingestellt. Dies kann individuell für die Achsen x, y, z, cb, x2, y2 oder xy durchgeführt werden, das Standardverhalten ist die Einstellung für alle Achsen.

set autoscale {{|min|max|fixmin|fixmax|fix} | fix | keepfix} 
unset autoscale {}

Werden Schlüsselwörter min oder max angefügt (dies ist nicht mit der Achse xy möglich), so wird nur das Minimum bzw. das Maximum autoskaliert. Mit den Schlüsselwörtern fixmin, fixmax oder fix wird die Erweiterung des Achsenbereiches auf die nächste Tic-Marken Position unterbunden.

Verfügbare Operatoren

Einseitige Operatoren

SymbolBeispielBeschreibung
--aeinseitiges Minus
++aeinseitiges Plus
~~aEiner-Komplement
!!alogische Negation
!a!Fakultät
$$3Argumenten-/Spalten-Aufruf in using-Manipulationen

Zweiseitige Operatoren

SymbolBeispielBeschreibung
**a**bPotenzierung
*a*bMultiplikation
/a/bDivision
%a%bModulo
+a+bAddition
-a-bSubtraktion
==a==bGleichheits-Operator
!=a!=bUngleichheits-Operator
<a<bkleiner-Operator
<=a<=bkleinergleich-Operator
>a>bGrößer-Operator
>=a>=bGrößergleich-Operator
&a&bBitweiser UND-Operator
^a^bBitweises Exklusiv-ODER
|a|bBitweises Inklusiv-ODER
&&a&&bLogisches UND
||a||bLogisches ODER

Die Operatoren Modulo (%), die Bitoperatoren (&, ^, |) und die logischen Operatoren (&& und ||) verlangen als Argumente Werte vom Integertyp. Logisches UND und logisches ODER evaluieren das zweite Argument nur, wenn es benötigt wird.

Dreiseitige Operatoren

Als ternärer Operatoren wird der If-Then-Else-Operator (?:) einzig unterstützt und besitzt das selbe Verhalten wie in C.

SymbolBeispielBeschreibung
?:a?b:cTernärer If-Then-Else-Operator

Ist das erste Argument (a) wahr, d.h. nicht 0, (dieses muß ein Integer-Wert sein), so wird das zweite Argument (b) evaluiert und zurückgegeben – andernfalls wird das dritte Argument (c) evaluiert und zurückgegeben.

Eingebaute Funktionen

Alle GnuPlot-Funktionen akzeptieren als Argument Ganzzahlen, reelle oder komplexe Zahlen – außer, es ist etwas anderes angegeben. Bei denjenigen Funktionen, die Winkelwerte als Argument benötigen oder diese zurückgeben, können diese als Radian oder Grad angegeben werden. Der Standardwerte hierfür ist Radian und kann über das Kommando angles geändert werden.

FunktionBeschreibung
abs(x)absoluten Wert des Argumentes; der Rückgabewert ist vom selben Typ wie die des Arguments, für komplexe Argumente ist abs(x) definiert als die Länge von x in der komplexen Ebene [z.B. sqrt(real(x)^2 + imag(x)^2)]
acos(x)inverser Cosinus in Radian oder Grad
acosh(x)inverser hyperbolischer Cosinus in Radian
arg(x)gibt die Ebene einer komplexen Zahl in Radian oder Grad zurück
asin(x)inversen Sinus in Radian oder Grad
asinh(x)inverser hyperbolischer Sinus in Radian
atan(x)inverser Tangens in Radian oder Grad
atan2(y,x)inverser Tanges vom Verhältnis der beiden reellen Teile der Argumente
atanh(x)inverser hyperbolischer Tangens
besj0(x)j0 Bessel-Funktion, Argumente müssen in Radian sein
besj1(x)j1 Bessel-Funktion, Argumente müssen in Radian sein
besy0(x)y0 Bessel-Funktion, Argumente müssen in Radian sein
besy1(x)y1 Bessel-Funktion, Argumente müssen in Radian sein
ceil(x)kleinster Integer-Wert, der nicht kleiner wie das übergebene Argument ist; bei komplexen Argumenten wird der kleinste Integer-Wert zurückgegeben, der nicht kleiner wie der reelle Anteil des Arguments ist;
cos(x)Cosinus in Radian oder Grad
cosh(x)hyperbolischer Cosinus in Radian oder Grad
erf(x)Fehler-Funktion des reellen Anteils vom Argument; ist das Argument eine komplexe Zahl, so wird der imaginäre Anteil ignoriert (siehe auch erfc, inverf und norm)
erfc(x)Gibt 1.0 zurück, die Fehler-Funktion des reellen Anteils vom Argument; ist das Argument eine komplexe Zahl, so wird der imaginäre Anteil ignoriert (siehe auch erf, inverf und norm)
exp(x)Exponential-Funktion; in manchen Implementationen, gibt exp(-x) für sehr große x einen undefinierten Wert zurück. Eine benutzerdefinierte Funktion wie safe(x) = x?100 ? 0 : exp(x) kann hier abhilfe schaffen
floor(x)größte Integer-Wert, der nicht görßer wie das übergebene Argument ist; bei komplexen Argumenten wird der größte Interger-Wert zurückgegeben, der nicht größer wie der reelle Anteil des Arguments ist;
gamma(x)Gamma-Funktion des reellen Anteils des Arguments; für den Interger-Wert n ist gamma(n+1) = n!
ibeta(p,q,x)unvollständige Beta-Funktionen des rellen Anteils der Argumente; die Argumente dürfen dabei die Schranken q>0 und x im Intervall [0:1] nicht überschreiten
inverf(x)Gibt die inverse Fehler-Funktion des reellen Anteils vom Argument zurück. Siehe auch erf und invnorm
igamma(a,x)unvollständige Gamma-Funktion der reellen Anteile der Argumente. Voraussetzungen sind a > 0 und x >= 0.
imag(x)Gibt den imaginären Anteil des Arguments als reelle Nummer zurück.
invnorm(x)Inverse Normalverteilungsfunktion der reellen Anteile des Arguments. Siehe auch norm
int(x)Integer-Funktion
lambertw(x)Lambert’s W Funktion, definiert über die Gleichung z=(W(z)*exp(W(z)) mit z einer reellen Zahl und z >= -exp(-1).
lgamma(x)Natürlicher Logarithmus der Gamma-Funktion der rellen Anteile des Arguments
log(x)Natürlicher Logarithmus (zur Basis e)
log10(x)Logarithmus zur Basis 10
norm(x)Gaußsche Normalverteilung der reellen Anteils vom Argument. Siehe auch invnorm, erf und erfc
rand(x)rand(0) erzeugt eine Pseudozufallszahl im Interval [0:1] vom den aktuellen Wert der beiden internen 32-Bit Zustände. rand(-1) setzt die beiden internen Zustände zurück auf einen Standard-Wert. rand(x) mit x>0 setzt die beiden internen Zustände auf einen Wert basierend auf x. rand({x,y}) für x>0 setzt den Zustand 1 auf x und Zustand 2 auf y.
real(x)Reellen Anteil vom Argument
sgn(x)Gibt das Vorzeichen des reellen Anteils vom Arguments zurück. Rückgabewert ist 1, wenn das Argument positiv ist, -1, wenn das Argument negativ und 0, wenn das Argument 0 ist
sin(x)Sinus in Radian oder Grad
sinh(x)hyperbolischer Sinus in Radian oder Grad
sqrt(x)Quadratwurzel
tan(x)Tangens in Radian oder Grad
tanh(x)hyperbolischer Tangens in Radian oder Grad

Weitere Funktionen, die für die Manipulation und Darstellung von Daten verwendet werden können, aber keine mathematischen Funktionen sind.

FunktionBeschreibung
column(x)kann nur in Ausdrücken als Teil der using-Manipulationen verwendet werden; siehe auch using
defined(x)gibt 1 zurück, wenn die Variable x definiert ist, ansonsten 0
tm_hour(x)interpretiert das Argument als eine Zeit in Sekunden seit dem 1. Jan. 2000 und gibt die Stunden im Bereich 0-23 als eine reelle Zahl zurück
tm_mday(x)interpretiert das Argument als eine Zeit in Sekunden seit dem 1. Jan. 2000 und gibt den Tag im Monat im Bereich 1-31 als eine reelle Zahl zurück
tm_min(x)interpretiert das Argument als eine Zeit in Sekunden seit dem 1. Jan. 2000 und gibt die Minuten im Bereich 0-59 als eine reelle Zahl zurück
tm_mon(x)interpretiert das Argument als eine Zeit in Sekunden seit dem 1. Jan. 2000 und gibt den Monat im Bereich 0-11 als eine reelle Zahl zurück
tm_sec(x)interpretiert das Argument als eine Zeit in Sekunden seit dem 1. Jan. 2000 und gibt die Sekunden im Bereich 0-59 als eine reelle Zahl zurück
tm_wday(x)interpretiert das Argument als eine Zeit in Sekunden seit dem 1. Jan. 2000 und gibt den Wochentag im Bereich 0-6 als eine reelle Zahl zurück
tm_yday(x)interpretiert das Argument als eine Zeit in Sekunden seit dem 1. Jan. 2000 und gibt den Tag im Jahr im Bereich 1-366 als eine reelle Zahl zurück
tm_year(x)interpretiert das Argument als eine Zeit in Sekunden seit dem 1. Jan. 2000 und gibt das Jahr als eine reelle Zahl zurück
valid(x)kann nur in Ausdrücken als Teil der using-Manipulationen verwendet werden; siehe auch using

Internet-Links