Springe zum Hauptinhalt

Archiv

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:
plot [0:2*pi] sin(x)
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

  • Dem Plotbefehl kann als Argument eine Funktion übergeben werden. Die Funktion kann vor dem Plot-Befehl, aber auch innerhalb des Plot-Befehles definiert werden.
  • Die unabhängige Variable sollte den Namen x tragen. Andere Namen für die unabhängige Variable können mittels set dummy Name1 zugeordnet werden.
    plot
         [min:max]                   # überschreibt globale Einstellungen (xrange, yrange)
         Funktion | "Datei"     
         axes                        # Angaben zu den darzustellenden Achsen
         title                       # Legendeneintrag 
         with                        # Stil der Darstellung 
    

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
    • set datafie separator
  • 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
    • set datafile missing
  • 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

set pm3d                                                 
splot x**2+y**2
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 Parameterdarstellung
set key outside top
replot
Parameterdarstellung1 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
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)
Animation parametrische Funktion
Inhalt der Kommando-Datei zum Erzeugen der Animation
zrot=5
load "loop.plt"

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