Visualisierung mit gnuplot - eine Einführung
Allgemeines
- Gnuplot ist eine freie Software, die sowohl mathematische Funktionen, als auch Daten wie beispielsweise Messwerte in einem Koordinatensystem grafisch darstellen kann
- sie ist für zahlreiche Betriebssystem verfügbar
- gnuplot ist ein kommandozeilenorientiertes interaktives Tool
- es ist für die Einbindung in Scripte gut geeignet
Wir betrachten heute die Arbeit unter Linux.
Unter Linux wird gnuplot durch Aufruf von /usr/bin/gnuplot in der Konsole gestartet, man erhält das gnuplot-Prompt gnuplot>
Grundsätzliches
- die gnuplot-Sitzung wird durch interaktive Texteingaben gesteuert
- die grafische Darstellung wird standardmäßig an den X-Server gesendet
- Kommando- und Funktionsnamen werden in Kleinbuchstaben angegeben
- Variablen und Funktionen müssen mit einem Buchstaben beginnen
- die Zeichen , : ; \ {} [] () haben eine feste Bedeutung
- Kommentare beginnen mit dem Doppelkreuz #
- Kommandos können sich über mehrere Zeilen erstrecken, das letzte Zeichen muss dann ein \ (Backslash) sein
- mehrere Kommandos in einer Zeile müssen durch Semikolon getrennt werden
- mehrere Argumente innerhalb eines Kommandos werden durch Komma getrennt
- die Reihenfolge der Optionen und Argumente ist meist fest vorgegeben
-
save "savefile.plt"
speichert die Befehle in eine Textdatei
-
load "savefile.plt"
bzw. /usr/bin/gnuplot savefile.plt
lädt die Befehle aus der Textdatei und führt sie sofort aus
- Beenden von gnuplot erfolgt mit
quit
oder exit
- eine Befehls-Historie wird im Home-Verzeichnis abgelegt
- existiert im Home- oder Arbeitsverzeichnis eine Datei .gnuplot, so werden die darin befindlichen Voreinstellungen geladen
- Hilfe zu den Befehlen erhält man mit dem Befehl help.
help # es werden allgemeine Grundlagen zur Arbeit mit gnuplot angezeigt
help set term # listet alle Möglichkeiten
help commands # Anzeige aller Kommandos
help commands plot # Hilfe zum Befehl plot
!Linux Shell Befehl
!ls # listet den Verzeichnisinhalt
!cat file.dat # Inhalt der Datei file.dat wird angezeigt
Voreinstellungen
Es gelten prinzipiell einige vordefinierte Standard-Einstellungen über den Stil der Abbildung.
- die erste Grafik wird in rot dargestellt
- die Legende wird in der rechten oberen Ecke platziert
- als Bezeichner werden die Argumente verwendet
- die Verwendung von Sonderzeichen hängt vom Terminal ab
- die Zuordnung von Linientypen ist definiert
- Standard-Wertebereich x=[-10,10]
Beispiele:
|
ein einfacher 2D-Plot Rahmen (border) ringsum Skaleneinteilung (tics) zeigt nach innen |
splot [0:pi][0:pi] sin(2*x)+cos(x)
|
Surfaceplot zweier Funktionen kein Rahmen Interaktion mit der Maus und bestimmten Tasten ist möglich Gitterdarstellung der Oberfläche |
Die gültigen Einstellungen werden mit dem Befehl show angezeigt.
show all # zeigt alle Einstellungen als Text an
test # grafische Anzeige der Einstellungen
|
grafische Anzeige der Einstellungen mittels test |
Mittels des set -Befehles können zahlreiche globale Einstellungen getroffen werden.
set term # listet alle verfügbaren Terminaltypen
set output # kann die Ausgabe umlenken, Standard ist der Bildschirm
set style # eine bestimmte Art des Plot-Typs vorgeben
set label # Platzierung der Legende vorgeben
set xdata time # definieren der x-Achse als Zeitachse
set timefmt # Zeitformat definieren ...
Das Aufheben der Einstellungen erfolgt mittels unset, mit reset kehrt man zu den Standardeinstellungen zurück.
Aktionen mit der Maus sind bei einigen Terminals möglich - Dies wird bei der Ausgabe von test angezeigt.
help mouse
set mouse # ist standardmäßig ein, wenn es vom Terminal unterstützt wird
Desweiteren können auch Interaktionen mit der Tastatur definiert werden. Es gibt eine Reihe voreingestellte Kombinationen.
- g - Gitterlinien ein / aus
- e - replot
- b - schaltet verschiedene Bezugslinien ein /aus
bind "Tastenkombination" "gnuplot-Befehl(e)"
Der Plot-Befehl
Die 2 Basiskommandos zum Plotten eines Graphen sind plot für den 2D-Plot und splot für den 3D-Plot (Surfaceplot).
2D Plot - Funktionen und Konstanten definieren
plot a=1, a*x**2, a=2, a*x**2 title "2.Funktion", a=4.6, a*x**2 with linespoints
|
mehrere Funktionen in einem Plot, mit vorgegebenen Konstanten |
plot g(x) = sin(x)*b*cos(x), b=1, g(x) with impulses, b=2, g(x) # Abb.
plot g(x) = sin(x)*b*cos(x), b=1, g(x) with impulses t "Funktion1", b=2, g(x) t "Funktion2" # Legende erhält einen Titel
|
mehrere Funktionen in einem Plot, mit unterschiedlichen Styles |
2D Plot - Datensätze plotten, Achsen beschriften
Messwerte, welche in einer Datei aufgelistet sind
- ascii-lesbare Datei
- die Werte können im zulässigen Zahlenformaten oder Datum- und Zeitformaten vorliegen
- als Dezimaltrennzeichen muss der Punkt verwendet werden
- jeder Datenpunkt entspricht einer Zeile
- spaltenweise Anordnung
- Trennzeichen sind Leerzeichen oder der Tabulator, dies kann auch neu definiert werden
- die Auswahl der Daten kann über index, every, using, smoot gesteuert werden
- eine definierte Anordnung von Leerzeilen kann ein Datenfile in Datenblöcke und Datensätze unterteilen
- fehlende Datenpunkte können durch "" oder 1/0 ersetzt werden, es können auch andere Zeichen für leere Einträge definiert werden
- Daten können durch Voranstellen von ? eliminiert werden
Inhalt der Beispieldatei
# Darstellen von Datenpunkten
set title "Messwerte"
set xdata time # x-Achse wird im Datums/Zeitformat skaliert
set timefmt "%H:%M:%S" # Format der vorliegenden Datums- oder Zeitangaben
set format x "%H:%M" # Format für die Achsenbeschriftung
set yrange [0: ] # die y-Achse beginnt bei Null, Obergrenze automatisch
plot "perfmeter.log" using 2:4 # die Spalte 2 wird x zugeordnet, die y-Werte werden der Spalte 4 entnommen
plot "perfmeter.log" using 2:4 with impulses t "CPU-Werte" # Darstellung der Werte durch Impulse, Legendenbezeichnung "CPU-Werte"
set tics out # Achseneinteilung nach außen setzen
set xlabel "Minuten" # Bezeichnung der x-Achse
set ylabel "CPU-Auslastung" # Bezeichnung der y-Achse
replot
set xtics nomirror
replot # keine Anzeige der Achseneinteilung auf der gegenüberliegenden Seite
set ytics nomirror
replot
set border 3 # Wahl der anzuzeigenden Achsen
plot "perfmeter.log" using 2:4 with impulses t "CPU-Werte" # siehe Abb.
|
Plot von Messdaten in einer zeitlichen Abfolge |
2D-Plot Mehrere Datensätze plotten, Achsenformate ändern
- Die 4 Achsen können unabhängig voneinander skaliert werden.
- die Intervalle für x2 und y2 können nicht lokal gesetzt werden, sie müssen global definiert werden
- axes steuert über welche Achsen die Werte dargestellt werden
set border 15 # alle Achsen anzeigen
unset xtics # Rückstellen auf den Standard
set xtics # Setzen der Achseneinteilung
set y2label "LOAD-Verhalten" # Bezeichnung der y2-Achse
set y2tics # Setzen der Achseinteilung für y2
plot "perfmeter.log" using 2:4 with impulses t "CPU-Werte", "perfmeter.log" using 2:10 with impulses t "LOAD" # siehe Abb.
plot "perfmeter.log" using 2:4 with impulses t "CPU-Werte", "perfmeter.log" using 2:($10*10) with impulses t "LOAD"
|
Plot von mehrerer Messdaten in einem Diagramm in einer zeitlichen Abfolge |
plot "perfmeter.log" using 2:4 with points t "CPU-Werte", "perfmeter.log" using 2:10 with boxes t "LOAD" axes x1y2 # siehe Abb.
|
Plot von mehrerer Messdaten in einem Diagramm mit separaten Y-Achsen |
set key top left # Platzieren der Legende links oben
set key box # einen Rahmen um die Legende zeichnen
plot "perfmeter.log" using 2:4 with points t "CPU-Werte", "perfmeter.log" using 2:10 with boxes t "LOAD" axes x1y2
|
Plot von mehrerer Messdaten in einem Diagramm mit separaten Y-Achsen und neu platzierter Legende |
3D-Plot von Datensätzen
- die Syntax ist weitestgehend gleich zu plot
- mehrere Achsensysteme können nicht verwendet werden
- Standard ist das Verbinden der Punkte mir Linien bzw. Gittern
- seit Version 4 kann die Fäche per pm3d mit einem Farb- oder Graustufenverlauf dargestellt werden.
Gitterdarstellung
splot "3d.dat" t "3D Plot" with lines
|
3D-Plot von Messwerten in der Standarddarstellung |
Darstellung durch Farbverläufe
set pm3d # Einfärben der Oberfläche
set title "3D Plot"; splot "3d.dat" t "3D Plot" # mehrere Kommandos in einer Zeile
|
Einfärben der Oberfläche mir Farb- bzw. Graustufenverlauf |
ein weiteres Beispiel - Inhalt der Beispieldatei
clear # Ausgebefenster leeren
splot "3d1.dat" t "3D Plot" with lines
|
3D-Plot von Messwerten, Liniendarstellung |
set pm3d
splot "3d1.dat" t "3D Plot" with lines
|
3D-Plot von Messwerten, Flächendarstellung |
Inhalt der Beispieldatei
splot "3d2.dat" t "3D Plot" with lines
|
3D-Plot von Messwerten, Liniendarstellung durch andere Blockstruktur der Messdaten |
3D-Plot mit unregelmäßig verteilten Datenpunkten
Soll Gnuplot unregelmäßig verteilte Datenpunkte darstellen, sollten zuerst die Lücken in der Datenpunktverteilung durch Interpolation geschlossen werden.
Dazu dient der Befehl set dgrid3d, welcher regelmäßige Gitterpunkte erzeugt.
Parameter sind die Anzahl der gewünschten Intervalle in x- und y-Richtung und ein Gewichtungsfaktor.
Inhalt der Beispieldatei
unset pm3d
set hidden3d # verdeckte Kanten ausblenden
set dgrid3d 20,20,3 # Erzeugen regelmäßiger Gitterpunkte
splot '3d3.dat' with lines
|
Interpolation fehlender Gitterpunkte |
3D-Plot einer Funktion
- mit hidden3d werden verdeckte Teile der Oberfläche nicht dargestellt, die Ober- und Unterseite bekommen unterschiedliche Farben
- auf die Oberfläche können Konturen gezeichnet werden, die auf die Basisfläche projeziert werden können
- eine Kontur verläuft entlang eines festen z-Wertes (Höhenlinie)
- die globale Option isosamples bestimmt die Dichte des Gitters
f1(x,y)=x**2+y**2
f2(x,y)=x**2-y**2
splot f1(x,y), f2(x,y)
|
Darstellung von zwei 3D Funktionen in einem Plot |
set hidden3d # verdeckte Kanten ausblenden
set contour both # Zeichnen der Kontur auf der Oberfläche und in der xy-Ebene
splot x**2+y**2
|
3D Funktion mit Plot der Konturen bestimmter Z-Werte |
|
Einfärben der Oberfläche mir Farb- bzw. Graustufenverlauf |
set isosamples 30 # Verfeinern der Gitterlinien
splot x**2+y**2
|
Dichte der Gitternetzlinien verfeinern |
set pm3d map # Projektion in die xy-Ebene mit Farbverlauf
splot x**2+y**2 # Abb.
set size square # quadratische Form der Projektion in der xy-Ebene
replot
|
Projektion in die xy-Ebene |
Parameterdarstellungen
Kurven in Parameterdarstellung:
Standardvariablen: t (plot) und u,v (splot)
set parametric
plot cos(t),sin(t) lw 2
plot cos(t),sin(t) lw 2, 0.5*cos(t),sin(t) lt -1
|
Parameterdarstellung |
set key outside top
replot
|
Legende außerhalb der Darstellung |
Multiplots
Darstellung mehrerer Plots über- oder nebeneinander:
set multiplot # Beginn Multiplot
set size x.x,y.y # Größe der Plots
set origin x.x,y.y # Positionierung (Untere linke Ecke)
set multiplot
set size 0.5,1.0
set origin 0.0,0.0
p x**2 # p - Abkürzung für plot
set origin 0.5,0.0
p x**3
unset multiplot
|
Darstellung mehrerer Plots |
Bemerkungen zur Verwendung in der Stapelverarbeitung
reread - Parameter können neu gesetzt werden
print - Ausgabe von Mitteilungen
pause - Unterbrechung des Programmablaufes
if then else - Konstrukte können zur Steuerung des Ablaufes genutzt werden
call "Datei" p1 .. p9 - Parameterübergabe möglich (Erweiterung von load)
Beispiel: 3D-Animation einer parametrischen Funktion
set parametric
set hidden3d
unset title
unset key
unset xtics
unset ytics
unset ztics
set border 0
set isosamples 50,10
set urange [-pi/2:pi/2]
set vrange [0:2*pi]
splot cos(u)*cos(v),cos(u)*sin(v),sin(u)
|
parametrische Funktion |
Inhalt der Kommando-Datei zum Erzeugen der Animation
Weiterverarbeitung der Grafik
Das Ausgabeformat, welches mittels terminal definiert wird, ist mit einem speziellen Treiber vergleichbar. Mit dem Programmstart wird üblicherweise das für das Betriebssystem passende Terminal aufgerufen.
In den letzten Jahren wurden verschiedenste Terminal für gnuplot geschrieben.
set terminal postscript # postscript einstellen fuer Ausgabe
set output "datei.ps" # Name der PS-Datei
replot
set terminal postscript eps
set output "datei.eps"
replot
set terminal png
...
set terminal kyo # Druckerterminals, hier für die Ausgabe auf Kyocera-Drucker
set table "outfile.dat" # Erzeugen einer ASCII-Datei mit den dargestellten Datenpunkten
replot # Interpolationsergebnisse und Konturen können exportiert werden
Sonstiges
set size 0.8,0.8 # Ändern der Größe der Darstellung
gnuplot -persist messd.plt # -persistent - Plotfenster bleibt stehen
gnuplot> load "messd.plt" # *pause -1* am Ende bewirkt dass das Ausgabefenster erhalten bleibt
chmod +x messd.plt ; ./messd.plt