Studieren in Chemnitz. Wissen, was gut ist.






Visualisierung mit gnuplot - eine Einführung

Allgemeines

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

 
           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.

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.
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

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

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

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

[[/pub/W2/W2kurse/WwWunterlagen0gnuplot/3d2.dat][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

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
parametric.png Parameterdarstellung
set key outside top
replot
parametric1.png 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 mulitplot
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.png Darstellung mehrerer Plots

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 

Bemerkungen zur Verwendung in der Stapelverarbeitung

reread - Parameter können neu gesetzt werden

print - Ausgabe von Mitteilungen

pause - Unterbrechung des Programmablaufes

call "Datei" p1 .. p9 - Parameterübergabe möglich (Erweiterung von load)

if then else - Konstrukte können zur Steuerung des Ablaufes genutzt werden

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.png parametrische Funktion
Inhalt der Kommando-Datei zum Erzeugen der Animation
zrot=5
load loop.plt
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